Javascript Problem
Thomas
- javascript
Hallo Leute,
ich habe folgenden Code (tut mir leid, den habe ich auch irgendwo raus kopiert und es läuft auch mehr oder weniger), aber da ich nicht so der Javascript Typ bin, wollte ich euch fragen:
var xmlDoc;
function loadXML()
{
if (window.ActiveXObject)
{
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load("script/hilfe.xml");
}
else if
(
document.implementation &&
document.implementation.createDocument)
{
xmlDoc= document.implementation.createDocument('','',null);
xmlDoc.load("script/hilfe.xml");
}
else
{
alert("Your browser cannot handle this script");
}
return true;
}
Die Funktion loadXML wird bei onLoad im Body Teil von jeder Seite geladen. Das 1. Problem ist schon, dass wenn ich die Hilfe.xml Datei veränder nur im IE die neuen Daten stehen. In Firefox passiert da nix. Im IE geht das.
Das 2. Problem ist, dass im IE folgende Warning kommt : xmlDoc ist Null oder kein Objekt und Firefox meldet da nix.
Also wie gesagt, ist nur so ein Copy & Paste Teil, und so ganz 100%ig habe ich das Skript an der Stelle
document.implementation &&
document.implementation.createDocument)
noch nicht verstanden. Hat da jemand einen Ansatzpunkt für mich?
Danke schonmal
Thomas
Hallo,
an der Stelle
document.implementation &&
document.implementation.createDocument)
eine Abfrage von benötigten Browserfähigkeiten. Also zuerst die
Frage nach ActiveX, also i.d.R. für die Möglichkeiten des MS
Explorer, dann wird gefragt, ob document.implementation
unterstützt wird, danach dann ob auch die Methode
document.implementation.createDocument unterstützt wird.
document.implementation.createDocument sofort abzufragen gäbe
bei Browsern, welche document.implementation gar nicht
unterstützen, einen Fehler.
Die Reihenfolge:
if (document.implementation && document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument("", "", null);}
else if (window.ActiveXObject){
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
sollte auch möglich sein. Hier wird übrigens, wohl wegen älterer
Browser, zusätzlich noch nach document.getElementById gefragt,
also if(window.ActiveXObject&&document.getElementById).
Grüsse
Cyx23
Hallo ihr beiden,
ich danke euch schon mal vielmals. Jetzt ist mir einiges klar geworden und bin dabei, dass etwas umzubauen.
Viele dank für die Antworten,
Viele Grüße,
Thomas
Hallo,
an der Stelle
document.implementation &&
document.implementation.createDocument)eine Abfrage von benötigten Browserfähigkeiten. Also zuerst die
Frage nach ActiveX, also i.d.R. für die Möglichkeiten des MS
Explorer, dann wird gefragt, ob document.implementation
unterstützt wird, danach dann ob auch die Methode
document.implementation.createDocument unterstützt wird.document.implementation.createDocument sofort abzufragen gäbe
bei Browsern, welche document.implementation gar nicht
unterstützen, einen Fehler.Die Reihenfolge:
if (document.implementation && document.implementation.createDocument) {
xmlDoc = document.implementation.createDocument("", "", null);}
else if (window.ActiveXObject){
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");sollte auch möglich sein. Hier wird übrigens, wohl wegen älterer
Browser, zusätzlich noch nach document.getElementById gefragt,
also if(window.ActiveXObject&&document.getElementById).Grüsse
Cyx23
Hallo,
Willst du einfach eine externe XML-Datei einladen? Dazu kannst du auch das vielseitigere XMLHttpRequest verwenden. Die createDocument-Sache ist eigentlich obsolet, das ist eine alte Gecko-Eigenheit.
Die Funktion loadXML wird bei onLoad im Body Teil von jeder Seite geladen. Das 1. Problem ist schon, dass wenn ich die Hilfe.xml Datei veränder nur im IE die neuen Daten stehen. In Firefox passiert da nix. Im IE geht das.
Das ist ein Caching-Problem. Das kannst du entweder durch HTTP-Header verhindern, die Caching unterbinden, oder du hängst beim Laden immer einen eindeutigen String an die URI an, z.B. den aktuellen Timestamp:
var adresse = "script/hilfe.xml?" + new Date().getTime();
Mathias