Bello: document.write in document.write mit Mozilla oder IE

Hallo,

ich habe ein Problem mit dem Unterschied bei document.write() im IE und Mozilla.

Ich schreibe eine komplette HTML-Seite in eine Variable xyz und lasse diese mit

document.open();
document.write(xyz);
document.close();

in das aktuelle Browserfenster laden. Allerdings enthält auch diese Seite wiederum kleinere Ausgaben mit document.write(), allerdings ohne open und close.

Interessant ist nun, daß die Sache mit dem IE problemlos funktioniert. Die Seite lädt komplett durch und auch die kleinen Ausgaben in der Seite sind da, wo sie sein sollen.

Anders beim Mozilla, der, so scheint es mir zumindest, die kleinen Ausgaben nicht innerhalb Ladezeit der neuen Seite ausführt, sondern erst am Schluss, so daß die komplette Seite durch die kleinen document.write()-Anweisungen wieder überschrieben wird.

Gibt es für das Problem irgendeine Lösung (innerHTML geht leider auch nicht) oder einen Workaround?

Danke für eure Hilfe

  1. hi,

    Gibt es für das Problem irgendeine Lösung (innerHTML geht leider auch nicht) oder einen Workaround?

    M.E. brauchst du ein sauberes Konzept, was das einfügen bzw. "nachladen" von Daten angeht.
    Das beschriebene Vorgehen ist IMHO "broken by design".

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hier mal eine Präzisierung des Problems von mir:

    Entält der String xyz einer {document.open();document.write(xyz);document.close()}-Anweisungsfolge eine Referenz auf eine EXTERNE Javascript-Datei à la <script src="http://somewhere/extern.js"></script>, werden weitere document.write()-Anweisung innerhalb des xyz-Strings erst nach vollständigem Darstellen der xyz-Html-Seite ausgeführt.
    D.h. solche page-internen document.write()-Ausgaben gelangen nicht an die richtige Stelle der xyz-Seite, sondern werden beim IE unten an die Seite angehängt, und Mozilla (bzw. Netscape4) schiebt bekanntermaßen selbständig ein document.open() vor das document.write() ein und so gelangen die Ausgaben auf eine völlig neue blanke Seite.

    Hier mal eine Demo zum nachvollziehen:
    --- Datei 'loader.html' ----
    <html>
    <head>

    <script language="JavaScript">
    function writeNewPageIntern()
    {
     document.open();
     document.write('<html><body><h1>WrittenPage Title</h1><hr><script language="JavaScript"> document.write("dynamic contents (inside string)")</script><hr></body></html>');
     document.close();
    }

    function writeNewPageExternJS()
    {
     document.open();
     document.write('<html><body><h1>WrittenPage Title</h1><hr><script language="JavaScript" src="http://localhost/test/extern.js"></script><hr>end of page</body></html>');
     document.close();
    }

    function writeNewPageExternJSIntern()
    {
     document.open();
     document.write('<html><body><h1>WrittenPage Title</h1><hr><script language="JavaScript" src="http://www.no-such-server.ddr/halb/Cgi/extern.js"></script><script language="JavaScript"> document.write("dynamic contents (inside string)")</script><hr>end of page</body></html>');
     document.close();
    }
    </script>

    </head>
    <body>

    <h1>LoaderPage Title</h1>

    <form action="javascript:writeNewPageIntern()"><input type="submit" value="writeNewPageIntern()"></form>

    <form action="javascript:writeNewPageExternJS()"><input type="submit" value="writeNewPageExternJS()"></form>

    <form action="javascript:writeNewPageExternJS()"><input type="submit" value="writeNewPageExternJSIntern()"></form>
    </body>
    </html>

    --- Datei Ende ---

    Die erste Funktion ist erfolgreich und demonstriert, das rekursive Aufrufe von document.write() kein Problem sind.

    Die zweite Funktion zeigt das o.g. Problem mit document.write()-Anweisungen aus der externen JS-Datei (Hier bitte den Ort der externen JS-Datei auf Eurem System anpassen!).

    Die dritte Funktion zeigt das o.g. Problem selbst wenn die externe JS -Datei nicht gefunden werden kann.

    --- Datei extern.js ---
    document.write("dynamic contents (extern JS)");
    --- Datei Ende ---

    Gruß
    Semmel