¿Cuál es más ampliamente compatible: window.onloado document.onload?
javascript
event-handling
dom-events
Chris Ballance
fuente
fuente

windoweventos:onloadyDOMContentLoaded. 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_eventwindow.onloadydocument.onloadson diferentes entre sí!window.onloadparece tener lugar después y tiene un poco más cargado quedocument.onload! (¡Algunas cosas están funcionando con la ventana que no funciona con el documento! ¡Eso va para document.onreadstatechange 'complete' también!)Respuestas:
¿Cuándo disparan?
window.onloadEn algunos navegadores, ahora asume el papel
document.onloady se activa cuando el DOM también está listo.document.onload¿Qué tan bien son compatibles?
window.onloadparece ser el más ampliamente apoyado. De hecho, algunos de los navegadores más modernos tienen en un sentido reemplazadodocument.onloadconwindow.onload.Los problemas de soporte del navegador son probablemente la razón por la cual muchas personas están comenzando a usar bibliotecas como jQuery para manejar la verificación del documento que está listo, así:
A los efectos de la historia.
window.onloadvsbody.onload:fuente
window.onloady<body onload="">que es completamente diferente (y la "estructura separada de la acción" tiene mucho más sentido en este contexto). No es que la respuesta sea incorrecta, pero la base es.document.onloades JS equivalente a jQuerydocument.ready?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.onloadpuede 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 .►Resultado:
Aquí está el comportamiento resultante, observable para Chrome v20 (y probablemente la mayoría de los navegadores actuales).
document.onloadeventoonloadse dispara dos veces cuando se declara dentro de<body>, una vez cuando se declara dentro de<head>(donde el evento actúa comodocument.onload).window.onloadcontrolador 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.htmlykeyboarder.js).Para obtener una lista de controladores de eventos del objeto de ventana , consulte la documentación de MDN.
fuente
Agregar escucha de eventos
Update March 20171 JavaScript de vainilla
2 jQuery
Buena suerte.
fuente
window.addEventListener('load', function() {...})? También he actualizado mi respuesta.De acuerdo con el análisis de documentos HTML - El final ,
El navegador analiza la fuente HTML y ejecuta scripts diferidos.
A
DOMContentLoadedse envía en eldocumentmomento en que todo el HTML se ha analizado y se ha ejecutado. El evento burbujea a lawindow.El navegador carga recursos (como imágenes) que retrasan el evento de carga.
Se
loadenvía un evento a laswindow.Por lo tanto, el orden de ejecución será
DOMContentLoadedoyentes de eventoswindowen la fase de capturaDOMContentLoadedoyentes de eventos dedocumentDOMContentLoadedoyentes de eventoswindowen la fase de burbujaloadoyentes de eventos (incluido elonloadcontrolador de eventos) dewindowNunca se debe invocar un
loaddetector de eventos de burbuja (incluido elonloadcontrolador de eventos)document. Solo seloadpueden invocar oyentes de captura , pero debido a la carga de un recurso secundario como una hoja de estilo, no debido a la carga del documento en sí.fuente
document - load - capture, de hecho, sucede, lo cual es contrario a lo que esperaba en mi búsqueda de por qué la carga de documentos no me está sucediendo. Curiosamente, es inconsistente. A veces aparece, a veces no, a veces aparece dos veces, pero nuncadocument - load - bubblesucede. Sugeriría no usardocument load.loadse envíe un evento con recursos externos. Ese evento no burbujea, por lo que generalmente no se detecta en el documento, pero debería aparecer en la fase de captura. Estas entradas se refieren a la carga de los elementos<style>y<script>. Creo que Edge tiene razón para mostrarlos, y Firefox y Chrome están equivocados.useCaptureopción me enseñó algo nuevo.En Chrome, window.onload es diferente de
<body onload="">, mientras que son iguales tanto en Firefox (versión 35.0) como en IE (versión 11).Puede explorar eso con el siguiente fragmento:
Y verá tanto "ventana cargada" (que viene primero) como "carga del cuerpo" en la consola de Chrome. Sin embargo, verá solo "carga del cuerpo" en Firefox e IE. Si ejecuta "
window.onload.toString()" en las consolas de IE y FF, verá:lo que significa que la asignación "window.onload = function (e) ..." se sobrescribe.
fuente
window.onloadyonunloadson atajos haciadocument.body.onloadydocument.body.onunloaddocument.onloady elonloadcontrolador en todas las etiquetas html parece estar reservado, pero nunca se activó'
onload' en el documento -> verdaderofuente
window.onload, sin embargo, a menudo son lo mismo. Del mismo modo, body.onload se convierte en window.onload en IE.
fuente
Sin embargo, Window.onload es el estándar: el navegador web en la PS3 (basado en Netfront) no admite el objeto de la ventana, por lo que no puede usarlo allí.
fuente
En breve
windows.onloadno es compatible con IE 6-8document.onloadno es compatible con ningún navegador moderno (el evento nunca se activa)Mostrar fragmento de código
fuente