La idea general es que los fuegos window.onload cuando la ventana del documento está listo para su presentación y document.onload incendios cuando el árbol DOM es (construido a partir del código de marcado dentro del documento) completó .
Idealmente, suscribirse a los eventos del árbol DOM permite manipulaciones fuera de la pantalla a través de Javascript, casi sin carga de CPU . Por el contrario, window.onload
puede tardar un tiempo en activarse , cuando aún no se han solicitado, analizado y cargado múltiples recursos externos.
► Escenario de prueba:
Para observar la diferencia y cómo su navegador de elección implementa los controladores de eventos mencionados anteriormente , simplemente inserte el siguiente código dentro de la <body>
etiqueta - - de su 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>
►Resultado:
Aquí está el comportamiento resultante, observable para Chrome v20 (y probablemente la mayoría de los navegadores actuales).
- No hay
document.onload
evento
onload
se dispara dos veces cuando se declara dentro de <body>
, una vez cuando se declara dentro de <head>
(donde el evento actúa como document.onload
).
- contar y actuar en función del estado del contador permite emular ambos comportamientos de eventos.
- Alternativamente, declare el
window.onload
controlador de eventos dentro de los límites del <head>
elemento HTML .
► Proyecto de ejemplo:
El código anterior se toma de la base de código de este proyecto ( index.html
y keyboarder.js
).
Para obtener una lista de controladores de eventos del objeto de ventana , consulte la documentación de MDN.
window
eventos:onload
yDOMContentLoaded
. Ejemplo de uso :,window.addEventListener('DOMContentLoaded', callback)
. A mediados de 2019, compatible con todos los principales navegadores. ----- developer.mozilla.org/en-US/docs/Web/API/Window/… ------ developer.mozilla.org/en-US/docs/Web/API/Window/load_event