javascript - node - cómo saber si el evento de "carga" de la ventana ya se activó
que es el event loop javascript (4)
¿Qué pasa con la anulación de window.load?
window._load = window.load;
window.load = function(){
window.loaded = true;
window._load();
}
Luego verifica
if (window.loaded != undefined && window.loaded == true){
//do stuff
}
Estoy escribiendo un script de Javascript. Este script probablemente se cargará de forma asíncrona (formato AMD).
En este script, me gustaría hacer nada importante hasta que se active el evento window.load. Así que escucho el evento de "carga" de la ventana.
Pero si el script se carga después del evento window.load ... ¿cómo puedo saber que window.load ya se activó?
Y, por supuesto, no quiero agregar algo en ningún otro script (todos están cargados de manera asincrónica, el problema es el mismo) :)
Editar:
Imagine un documento HTML sin Javascript.
Que alguien inserte en esta etiqueta doc, y esta etiqueta de script carga mi archivo Javascript.
Esto ejecutará mi script.
¿Cómo puede saber este script si window.load ya se activó?
No jQuery, ninguna secuencia de comandos en el documento HTML antes que el mío.
Es posible saber ??
Encontré la propiedad window.document.readystate. Esta propiedad es para el evento de documento "listo" I gess, no para la ventana "cargar". ¿Hay algo similar para el evento de "carga" de ventana?
Aquí está mi respuesta:
window.addEventListener("load", function () {
window.loaded = true;
});
function logLoaded() {
console.log("loaded");
}
(function listen () {
if (window.loaded) {
logLoaded();
} else {
console.log("notLoaded");
window.setTimeout(listen, 50);
}
})();
Puede leer acerca de addEventListener () y su compatibilidad (es nuevo en la especificación de ECMAScript 5) here . Es la nueva forma "preferida" de hacer las cosas en el futuro.
Puede leer sobre las expresiones de función invocadas inmediatamente (IIFE) (alternativamente, funciones anónimas autoinvocadas o funciones anónimas invocadas inmediatamente) here .
EDITAR: Aquí hay una buena respuesta en :
¿Cómo comprobar si DOM está listo sin un marco?
Si desea saber específicamente si el evento de carga de DOM se ha disparado, establezca una variable global en un controlador de eventos de "carga" de DOM y luego verifique su existencia cuando se cargue su nuevo código.
// in ''load'' event handler
window.domLoadEventFired = true;
// in code you are loading asynchronously
if (typeof window.domLoadEventFired !== undefined) {
// ...
}
La solución más fácil podría ser verificar document.readyState == ''complete''
, ver http://www.w3schools.com/jsref/prop_doc_readystate.asp
Si no desea usar jQuery, la lógica que utiliza es:
if( !document.body )
setTimeout( checkAgain, 1 );
Entonces, entre el evento cargado con Windows y verificar si la propiedad del cuerpo del documento está disponible, puede verificar si el DOM está listo