TS: HTML-Elemente seit HTML5

Beitrag lesen

Hallo und guten Nachmittag,

Man muss bei der Notation im head halt darauf achten, dass man die Ausführung erst beginnen lässt, wenn das Dokument im Browser angekommen ist,

Also auf das DOMContentLoaded-Event lauschen.

was sich wiederum grundsätzlich verzögert, weil erst der javaScript-Code geladen und analysiert werden muss.

In HTML5 gibt es die Attribute async und defer fürs script-Element, die das Blockieren des Renderns verhindern.

Wenn ich die Beschreibung der genannten Attribute in der Doku betrachte, überschneiden und widersprechen sich deren Anwendungsgebiete teilweise miteinander und mit DOMContentLoaded.

  • async: Das Script wird ausgeführt, sobald es geladen ist.
  • defer: Das (externe) Script wird erst ausgeführt, wenn die Seite geladen ist.

Das Attribut async sorgt dafür, dass die Ausführung des Skripts erst dann beginnt, wenn es selbst vollständig geladen ist. Das Attribut defer hingegen startet die Ausführung, wenn das Dokument vollständig geladen ist. Die beiden Attribute sollten, wenn ich das richtig deute, nicht zusammen notiert werden, weil sich ihre Aussagen widersprechen. Andererseits scheint mit defer zum selben Zeitpunkt zuzuschlagen, wenn DOMContentLoaded auslösen würde, falls script ohne das Attribut defer notiert ist. Oder liege ich damit falsch?

Woraus schließt Du jetzt, dass sich die Attribute widersprechen?
Steht das so in der Spezifikation, dass sie nicht gemeinsam verwendet werden dürfen?

Ich würde das sonst so verstehen, dass sie beide gemeinsam dann dafür sorgen, dass sowohl Script als auch Content geladen sein müssen, damit die Interpretation und Ausführung des Scriptes (der Scripte?) vorgenommen wird.

Das würde mir ersparen, einen eigenen Eventlistener dafür einrichten zu müssen und in jeder dämlichen Funktion bzw. Anweisung noch das Semaphor abfragen zu müssen.

Nur was passiert in Browsern, die HTML5 noch nicht interpretieren wollen?

Grüße
TS