Ogólna idea jest, że pożary window.onload gdy okno Dokument jest gotowy do prezentacji i document.onload pożarów , gdy drzewa DOM (zbudowany z kodu znaczników w dokumencie) jest zakończona .
Idealnie, subskrybowanie zdarzeń drzewa DOM , pozwala na manipulowanie poza ekranem za pomocą Javascript, nie powodując prawie żadnego obciążenia procesora . Przeciwnie, uruchomieniewindow.onload
może zająć trochę czasu , gdy wiele zewnętrznych zasobów musi być jeszcze wymaganych, przeanalizowanych i załadowanych.
► Scenariusz testowy:
Aby zaobserwować różnicę i sposób, w jaki wybrana przeglądarka implementuje wyżej wymienione procedury obsługi zdarzeń , wystarczy wstawić następujący kod w <body>
znaczniku - - dokumentu .
<script language="javascript">
window.tdiff = []; fred = function(a,b){return a-b;};
window.document.onload = function(e){
console.log("document.onload", e, Date.now() ,window.tdiff,
(window.tdiff[0] = Date.now()) && window.tdiff.reduce(fred) );
}
window.onload = function(e){
console.log("window.onload", e, Date.now() ,window.tdiff,
(window.tdiff[1] = Date.now()) && window.tdiff.reduce(fred) );
}
</script>
► Wynik:
Oto wynikowe zachowanie, które można zaobserwować w przeglądarce Chrome v20 (i prawdopodobnie w większości obecnych przeglądarek).
- Brak
document.onload
zdarzenia
onload
odpala dwa razy, gdy zostanie zadeklarowany w środku <body>
, raz, gdy zostanie zadeklarowany w środku <head>
(gdzie zdarzenie działa jak document.onload
).
- liczenie i działanie zależne od stanu licznika pozwala naśladować oba zachowania zdarzeń.
- Ewentualnie zadeklaruj
window.onload
moduł obsługi zdarzeń w ramach <head>
elementu HTML .
►Przykładowy projekt:
Powyższy kod pochodzi z bazy kodu tego projektu ( index.html
i keyboarder.js
).
Aby uzyskać listę procedur obsługi zdarzeń obiektu okna , zapoznaj się z dokumentacją MDN.
window
zdarzenia:onload
iDOMContentLoaded
. Przykład użycia :,window.addEventListener('DOMContentLoaded', callback)
. Od połowy 2019 r. Kompatybilny ze wszystkimi głównymi przeglądarkami. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_event