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

Beitrag lesen

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