Chris: Wann wird eine externe JavaScript-Datei nachgeladen?

Beitrag lesen

Erst beim defer-Zitat wird implizit gesagt, dass ohne defer das Parsing angehalten werden muss - aber auch nur wegen document.write. Kein Wort über externe Scripts.

Da steht aber:

When set, this boolean attribute provides a hint to the user agent that the script is not going to generate any document content (e.g., no "document.write" in javascript) and thus, the user agent can continue parsing and rendering.<

Wenn dieses Attribut gesetzt ist, (nur) dann weiß der Browser, dass er weitermachen kann.

Zwar steht das nicht explizit so da, aber wenn dieses Attribut nicht gesetzt ist - was ich doch erst mal explizit machen müsste (der Browser setzt es immerhin nicht automatisch) -, dann müsste der Browser doch erst mal mit der weiteren Ausführung des HTML-Dokuments warten; also bis das Script ausgeführt wurde - in diesem Fall also die komplette JavaScript-Datei geladen wurde. Oder interpretiere ich das dann insofern nur falsch?

Gerade das defer-Attribut ist hoffnungslos unterspezifiziert (und der IE als einziger Browser, der es implementiert, implementiert es m.W. auch gänzlich anders, also falsch im Sinne von HTML 4).

Das ist zumindest diesem Dokument aber nicht zu entnehmen. Müsste ich erst mal nach Quellen zu suchen.

Damit wären wir aber wieder am Anfang angelangt. Dann hätte der Autor des ersten Buches ja doch wieder (irgendwie) Recht.

Was macht man denn dann?

Am Ende der JavaScript-Datei eine boolean-Variable auf true setzen und diese dann im Script in der HTML-Datei abfragen, bevor man document.write ausführt?

externe JavaScript-Datei:
...
scriptx_geladen = true;

HTML-Datei:
...
<script type="text/javascript" src="..."></script>
</head>
<body>
<script type="text/javascript">
if (scriptx_geladen)
{
document.write(ausgabe);
}
...

Dann würde zumindest auf keinen Fall mehr eine Fehlermeldung ausgegeben. Aber wird dann auch garantiert noch die Variable ausgabe ausgegeben? Wenn die Bedingung bereits geprüft und als falsch ausgewertet wurde, dann wird doch nicht immer wieder geprüft, bis das externe Script endlich komplett eingelesen wurde? Dann könnte es auch sein, dass überhaupt nichts mehr ausgeben wird?

Ich könnte auch alles in eine Funktion packen:

externe JavaScript-Datei:
...
function ausgeben()
{
ausgabe = "Hallo!";
}

HTML-Datei:
...
<script type="text/javascript" src="..."></script>
</head>
<body>
<script type="text/javascript">
ausgeben();
...

Aber könnte es dann nicht vorkommen, dass dann stattdessen die Funktion noch nicht definiert ist? Dann müsste ich wieder mit einer Kontrollvariablen hantieren. Und hätte wieder die Einschränkung, dass ich nur sicherstellen könnte, dass keine Fehlermeldung ausgegeben wird, aber nicht wüsste, ob dann auch wirklich eine Ausgabe erfolgt.

Irgendwie muss man doch die korrekte Ausführung sicherstellen können. Sonst könnte man doch quasi überhaupt nichts gegen dieses Problem unternehmen. Kann doch nicht sein!?