Quiero llamar a una función después de que se cargue un documento, pero el documento puede o no haber terminado de cargarse todavía. Si se cargó, entonces puedo llamar a la función. Si NO se cargó, entonces puedo adjuntar un detector de eventos. No puedo agregar un escucha de eventos después de que ya se haya activado la carga, ya que no se llamará. Entonces, ¿cómo puedo verificar si el documento se ha cargado? Intenté el siguiente código pero no funciona del todo. ¿Algunas ideas?
var body = document.getElementsByTagName('BODY')[0];
// CONDITION DOES NOT WORK
if (body && body.readyState == 'loaded') {
DoStuffFunction();
} else {
// CODE BELOW WORKS
if (window.addEventListener) {
window.addEventListener('load', DoStuffFunction, false);
} else {
window.attachEvent('onload', DoStuffFunction);
}
}
javascript
events
onload
addeventlistener
Marcos
fuente
fuente
Respuestas:
No hay necesidad de todo el código mencionado por galambalazs. La forma entre navegadores de hacerlo en JavaScript puro es simplemente probar
document.readyState
:Así es también como lo hace jQuery.
Dependiendo de dónde se cargue el JavaScript, esto se puede hacer dentro de un intervalo:
De hecho,
document.readyState
puede tener tres estados:Entonces, si solo necesita que el DOM esté listo, verifique
document.readyState === "interactive"
. Si necesita que toda la página esté lista, incluidas las imágenes, consultedocument.readyState === "complete"
.fuente
document.readyState == "complete"
, significa que todo, incluidas las imágenes, se han cargado.document.readyState
para asegurarme de que la función se inicie después de que se haya analizado DOM, o más tarde, dependiendo de cuándo se haya llamado. ¿Hay algún evento interactivoreadyState
?/loaded|complete/.test(document.readyState)
. Algunos navegadores están configuradosdocument.readyState
como "cargados" en lugar de "completos". Además, document.readyState NO garantiza que se hayan cargado las fuentes, no hay una buena manera de probarlo sin un complemento.document.onreadystatechange
? Esto parece más simplificado si los navegadores lo admiten. stackoverflow.com/questions/807878/…document.readyState !== "loading"
el estado "DOM listo". Esto evita que surjan problemas sireadyState
se verifica tarde por algún motivo (después del estado "interactivo").No hay necesidad de una biblioteca. jQuery usó este script por un tiempo, por cierto.
http://dean.edwards.name/weblog/2006/06/again/
fuente
init
no se ejecutará si este código que publicó se incluye después de que la página ya se haya cargado, que es el punto del OP: él / ella no puede controlar cuándo se incluye su script. (tenga en cuenta que solo lasetInterval
sucursal funcionará)Probablemente quiera usar algo como jQuery, que facilita la programación de JS.
Algo como:
Parece que haces lo que buscas.
fuente
ready()
se llama después de la carga del documento, la función aprobada se ejecuta inmediatamente.fuente
document.loaded
siempre está indefinidobody.readyState === 'loaded'
Si realmente desea que este código se ejecute en la carga , no en domready (es decir, también necesita que se carguen las imágenes), desafortunadamente la función de listo no lo hace por usted. Generalmente solo hago algo como esto:
Incluya en el documento javascript (es decir, siempre se llama antes de que se active la carga):
Entonces tu código:
(O el equivalente en su marco de preferencia). Utilizo este código para realizar precaching de JavaScript e imágenes para futuras páginas. Como las cosas que recibo no se usan para esta página, no quiero que tenga prioridad sobre la descarga rápida de imágenes.
Puede haber una mejor manera, pero aún no la he encontrado.
fuente
Mozila Firefox dice que
onreadystatechange
es una alternativa aDOMContentLoaded
.En
DOMContentLoaded
el documento de Mozila dice:Creo que el
load
evento debería usarse para un documento completo + carga de recursos.fuente
El anterior con JQuery es la forma más fácil y más utilizada. Sin embargo, puede usar javascript puro, pero intente definir este script en la cabeza para que se lea al principio. Lo que buscas es
window.onload
evento.A continuación se muestra un script simple que creé para ejecutar un contador. El contador se detiene después de 10 iteraciones.
fuente
Prueba esto:
fuente
Tengo otra solución, mi aplicación debe iniciarse cuando se crea un nuevo objeto de MyApp, por lo que se ve así:
está funcionando en todos los navegadores, eso lo sé.
fuente