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.onloadpuò 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.onloadevento
onloadspara 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.onloadgestore eventi all'interno dei limiti <head>dell'elemento HTML .
►Esempio di progetto:
Il codice sopra è preso dalla base di codice di questo progetto ( index.htmle keyboarder.js).
Per un elenco dei gestori di eventi dell'oggetto finestra , fare riferimento alla documentazione MDN.
windoweventi:onloadeDOMContentLoaded. 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