Thomas: Javascript Problem

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

  1. 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

    1. 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

  2. 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