molily: Skript nicht erst ausführen, wenn Seite vollständig geladen ist

Beitrag lesen

Hallo,

Möglich scheint es aber zu sein, dass das JavaScript auch schon vor dem vollständigen Laden ausgeführt wird. Mit jQuery geht es nämlich: js-test-2.html (zum Nachvollziehen Cache leeren)

Die Frage ist nur: wie (machen die das)?

Der load-Event feuert, wenn das Dokument mitsamt aller Ressourcen, d.h. Bilder, iframes usw. geladen ist.

Beim Unobtrusive JavaScript ist es aber unwichtig, ob Bilder schon geladen sind. Man will schließlich nur auf den fertigen DOM-Elementenbaum zugreifen, um gewisse Element zu suchen bzw. anzusprechen und denen Event-Handler zu verpassen.

Schau dir mal im (ungepackten) jQuery-Code die Funktion bindReady an. jQuery nutzt eine andere Möglichkeit als load. In erster Linie wird mit dem Event DOMContentLoaded gearbeitet. Der wird im Grunde genutzt wie load, feuert aber, sobald das DOM zur Verfügung steht. Den Event unterstützen fast alle modernen Browser.

Für den IE und ältere Safaris gibt es Alternativlösungen. Die beruhen im Grunde allesamt darauf, dass gewisse Objekte abgefragt werden bzw. Funktionen aufgerufen werden, von denen man weiß, dass sie erst beim fertig geladenen DOM-Baum zur Verfügung stehen. Diese Abfragen werden in winzigen Abständen solange wiederholt, bis das DOM zur Verfügung steht. Dann werden alle Funktionen ausgeführt, die man mit $(function () { ... }) bzw. $(document).ready(...) registriert hat.

Dann gibts für einige Browser noch Zusätze, damit gewartet wird, bis auch alle externen Stylesheets fertig geladen sind, damit deren Formatierungen schon auf die Elemente angewendet sind, wenn man darauf zugreift.

Mathias