L'idea generale è che gli incendi window.onload quando la finestra del documento è pronto per la presentazione e document.onload incendi quando il DOM (costruito dal codice di markup all'interno del documento) è completata .
Idealmente, l'abbonamento agli eventi della struttura DOM , consente manipolazioni fuori schermo tramite Javascript, senza quasi alcun carico della CPU . Al contrario, window.onload
può richiedere del tempo per essere attivato , quando più risorse esterne devono ancora essere richieste, analizzate e caricate.
► Scenario di prova:
Per osservare la differenza e come il tuo browser preferito implementa i suddetti gestori di eventi , inserisci semplicemente il seguente codice nel <body>
tag - - del tuo documento .
<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>
►Result:
Ecco il comportamento risultante, osservabile per Chrome v20 (e probabilmente la maggior parte dei browser attuali).
- Nessun
document.onload
evento
onload
spara due volte quando dichiarato all'interno del <body>
, una volta quando dichiarato all'interno del <head>
(dove l'evento agisce come document.onload
).
- contare e agire in base allo stato del contatore consente di emulare entrambi i comportamenti degli eventi.
- In alternativa, dichiarare il
window.onload
gestore eventi all'interno dei limiti <head>
dell'elemento HTML .
►Esempio di progetto:
Il codice sopra è preso dalla base di codice di questo progetto ( index.html
e keyboarder.js
).
Per un elenco dei gestori di eventi dell'oggetto finestra , fare riferimento alla documentazione MDN.
window
eventi:onload
eDOMContentLoaded
. Esempio di utilizzo :,window.addEventListener('DOMContentLoaded', callback)
. A partire dalla metà del 2019, compatibile con tutti i principali browser. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_event