Welches wird allgemeiner unterstützt: window.onload
oder document.onload
?
javascript
event-handling
dom-events
Chris Ballance
quelle
quelle
window
Ereignisse:onload
undDOMContentLoaded
. Anwendungsbeispiel:,window.addEventListener('DOMContentLoaded', callback)
. Ab Mitte 2019 kompatibel mit allen gängigen Browsern. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_eventwindow.onload
unddocument.onload
sind verschieden voneinander!window.onload
scheint danach zu stattfinden und hat etwas mehr geladen alsdocument.onload
! (Einige Dinge funktionieren mit Fenstern, die nicht mit Dokumenten funktionieren! Dies gilt auch für document.onreadstatechange 'complete'!)Antworten:
Wann schießen sie?
window.onload
In einigen Browsern übernimmt es jetzt die Rolle von
document.onload
und wird ausgelöst, wenn das DOM ebenfalls bereit ist.document.onload
Wie gut werden sie unterstützt?
window.onload
scheint am weitesten verbreitet zu sein. In der Tat haben einige der meisten modernen Browser in ein Gefühl ersetztdocument.onload
mitwindow.onload
.Probleme mit der Browserunterstützung sind höchstwahrscheinlich der Grund, warum viele Benutzer Bibliotheken wie jQuery verwenden , um die Überprüfung des bereitstehenden Dokuments durchzuführen.
Zum Zweck der Geschichte.
window.onload
vsbody.onload
:quelle
window.onload
und<body onload="">
völlig anders gerichtet zu sein (und die "von der Handlung getrennte Struktur" ist in diesem Zusammenhang viel sinnvoller). Nicht dass die Antwort falsch ist, aber die Grundlage dafür ist.document.onload
JS-Äquivalent zu jQuery istdocument.ready
?Die allgemeine Idee ist, dass window.onload ausgelöst wird, wenn das Fenster des Dokuments zur Präsentation bereit ist, und document.onload ausgelöst wird, wenn der DOM-Baum (erstellt aus dem Markup-Code im Dokument) abgeschlossen ist .
Im Idealfall ermöglicht das Abonnieren von DOM-Tree-Ereignissen Offscreen-Manipulationen über Javascript, wobei fast keine CPU-Last anfällt . Im Gegensatz dazu
window.onload
kann das Feuern eine Weile dauern , wenn noch mehrere externe Ressourcen angefordert, analysiert und geladen werden müssen.►Testszenario:
Um den Unterschied und zu beobachten , wie Sie Ihren Browser der Wahl implementiert die oben genannten Event - Handler , legen Sie einfach den folgenden Code innerhalb Ihres Dokuments -
<body>
- tag.►Ergebnis:
Hier ist das resultierende Verhalten, das für Chrome v20 (und wahrscheinlich die meisten aktuellen Browser) zu beobachten ist.
document.onload
Ereignis.onload
wird zweimal ausgelöst<body>
, wenn es innerhalb von deklariert wird , einmal, wenn es innerhalb von deklariert wird<head>
(wobei das Ereignis dann als fungiertdocument.onload
).window.onload
Ereignishandler innerhalb der Grenzen des HTML-<head>
Elements deklarieren .►Beispielprojekt:
Der obige Code stammt aus der Codebasis (
index.html
undkeyboarder.js
) dieses Projekts .Eine Liste der Ereignishandler des Fensterobjekts finden Sie in der MDN-Dokumentation.
quelle
Ereignis-Listener hinzufügen
Update March 2017
1 Vanille-JavaScript
2 jQuery
Viel Glück.
quelle
window.addEventListener('load', function() {...})
. Ich habe auch meine Antwort aktualisiert.Laut Parsing HTML-Dokumente - Das Ende ,
Der Browser analysiert die HTML-Quelle und führt verzögerte Skripte aus.
A
DOMContentLoaded
wird zu demdocument
Zeitpunkt versendet, an dem der gesamte HTML-Code analysiert und ausgeführt wurde. Das Ereignis sprudelt zumwindow
.Der Browser lädt Ressourcen (wie Bilder), die das Ladeereignis verzögern.
Eine
load
Veranstaltung wird am versandtwindow
.Daher wird die Ausführungsreihenfolge sein
DOMContentLoaded
Ereignis-Listener vonwindow
in der ErfassungsphaseDOMContentLoaded
Event-Listener vondocument
DOMContentLoaded
Event-Listenerwindow
in der Bubble-Phaseload
Ereignis-Listener (einschließlichonload
Ereignishandler) vonwindow
Ein Bubble-
load
Event-Listener (einschließlichonload
Event-Handler) indocument
sollte niemals aufgerufen werden.load
Möglicherweise werden nur Capture- Listener aufgerufen, jedoch aufgrund des Ladens einer Unterressource wie eines Stylesheets und nicht aufgrund des Ladens des Dokuments.quelle
document - load - capture
passiert tatsächlich, was im Widerspruch zu dem steht, was ich bei meiner Suche erwartet hatte, warum das Laden von Dokumenten für mich nicht erfolgt. Seltsamerweise ist es inkonsistent. Manchmal erscheint es, manchmal nicht, manchmal erscheint es zweimal - aber esdocument - load - bubble
passiert nie . Ich würde vorschlagen, nicht zu verwendendocument load
.load
Ereignis auf externen Ressourcen ausgelöst wird. Dieses Ereignis sprudelt nicht, sodass es normalerweise nicht im Dokument erkannt wird, es sollte sich jedoch in der Erfassungsphase befinden. Diese Einträge beziehen sich auf die Last der Elemente<style>
und<script>
. Ich denke, Edge ist richtig, um sie zu zeigen, und Firefox und Chrome sind falsch.useCapture
Option hat mir etwas Neues beigebracht.In Chrome unterscheidet sich window.onload von
<body onload="">
, während sie in Firefox (Version 35.0) und IE (Version 11) identisch sind.Sie können dies anhand des folgenden Ausschnitts untersuchen:
Und Sie werden sowohl "Fenster geladen" (was zuerst kommt) als auch "Body Onload" in der Chrome-Konsole sehen. In Firefox und IE wird jedoch nur "Body Onload" angezeigt. Wenn Sie "
window.onload.toString()
" in den Konsolen von IE & FF ausführen , sehen Sie:was bedeutet, dass die Zuordnung "window.onload = function (e) ..." überschrieben wird.
quelle
window.onload
undonunload
sind Verknüpfungen zudocument.body.onload
unddocument.body.onunload
document.onload
und deronload
Handler für alle HTML-Tags scheint reserviert zu sein, wird jedoch nie ausgelöst'
onload
' im Dokument -> wahrquelle
window.onload sind jedoch oft dasselbe. In ähnlicher Weise wird body.onload im IE zu window.onload.
quelle
Window.onload ist jedoch der Standard - der Webbrowser in der PS3 (basierend auf Netfront) unterstützt das Fensterobjekt nicht, sodass Sie es dort nicht verwenden können.
quelle
Zusamenfassend
windows.onload
wird von IE 6-8 nicht unterstütztdocument.onload
wird von keinem modernen Browser unterstützt (Ereignis wird nie ausgelöst)Code-Snippet anzeigen
quelle