2012-07-17 19 views
6

Necesito averiguar si la ventana se ha cargado o no.Determinando si la ventana se ha cargado sin utilizar ninguna variable global

Quiero crear una función checkLoaded que devolverá true o false para indicar esto, en función de cuándo lo llamo.

<html> 
<head> 
    function checkLoaded(){ 
    //alert true if window is loaded or alert false 
    } 
</head> 
<body onload="checkLoaded()"> <!-- This should alert true --> 
    Loding window. 
    <script> 
     checkLoaded();// this should alert false; 
    </script> 
</body> 
</html> 

No quiero utilizar una variable global que configuro cuando se carga la ventana.

¿Hay alguna manera de que pueda verificar el estado del objeto window, quizás una propiedad?

No quiero usar jQuery ni ninguna otra biblioteca externa.

+0

si está en el controlador 'onload', la ventana se ha terminado de cargar. ¿Cuál es tu pregunta? – jbabey

+0

tengo una función y la misma función debería estar alerta verdadera o falsa. basado en donde lo estoy llamando. – gaurang171

+0

como menciona Grzegorz Kaczan a continuación, solo tiene dos eventos para trabajar. De modo que puede usar cualquiera de los eventos que mejor le convengan para establecer sus valores verdaderos/falsos para comparar. También puede ayudar a proporcionar un contexto sobre lo que está tratando de lograr y por qué. La "carga de la ventana" puede significar muchas cosas para muchas personas. y esos dos eventos básicos proporcionan la función() {haz lo que quieras aquí} para lograr la mayoría de las necesidades. –

Respuesta

20

Puede utilizar la propiedad document.readyState para comprobar si el documento se ha cargado sin escuchar para cualquier evento. Se establecerá en "complete" compruebe si el documento y todos los subrecursos están cargados. (Esto corresponde al caso load.)

function checkLoaded() { 
    return document.readyState === "complete"; 
} 

Si sólo desea comprobar si el documento se ha cargado, sin preocuparse por subresources, también se puede comprobar si la propiedad es "interactive".

function checkLoaded() { 
    return document.readyState === "complete" || document.readyState === "interactive"; 
} 

Esto debería funcionar en los navegadores actuales, pero no es compatible con versiones anteriores de todos los navegadores.

+0

esto es exactamente lo que estoy buscando muchas gracias. – gaurang171

+1

¿Cuáles son los navegadores "actuales" y cuáles son los navegadores "anteriores"? – Steve

+5

Este código verifica el documento listo, no la carga de la ventana. Existe una diferencia http://stackoverflow.com/a/8835458/319266 – Krinkle

1

Esto alertará cuando se carga la ventana:

(function(w) { 
    //private variable 
    var loaded = false; 
    w.onload = function() { 
     loaded = true; 
    }; 

    w.checkLoaded = function() { 
     alert(loaded); 
    }; 
})(window); 

Ahora puede llamar checkLoaded() desde cualquier parte de su aplicación y se volverá verdadero o falso.

+0

por favor entienda el requisito correctamente.Tengo una función y la misma función debería estar alerta verdadera o falsa. basado en donde lo estoy llamando. – gaurang171

+0

¿Funcionará en el navegador? – Jashwant

+0

@ keyuratcodebins.com actualizó el código para incluir una función – Paul

1

Tienes 2 eventos actuales:

addListener(document, "DOMContentLoaded", function(){}); //Dom parsing is finished 
addListener(window, "load", function(){}); //loading of all external stuff is done 

se puede ver la diferencia en los here

+0

mi pregunta es que tengo una función checkLoaded y quiero saber si la ventana está cargada o no. con esa función miro en el código donde he llamado a la misma función dos veces en dos lugares diferentes. – gaurang171

1

Tal vez simplemente algo como esto:

<html> 
<script> 
    var loaded = false; 
  function checkLoaded(){ 
    alert(window.loaded); 
  } 
</script> 
<body onload="window.loaded = true; checkLoaded()"> 
   Loading window. 
     <script> 
     checkLoaded(); 
    </script> 
</body> 
</html> 
0

¿Esto ayuda?

<script> 
    var loaded = false; 
    function checkLoaded(){ 
     alert(loaded); 
     //alert true if window is loaded or alert false 
    } 
</script> 


<body onload="loaded = true;checkLoaded();"> <!-- This should alert true --> 
    Loding window. 
    <script> 
     checkLoaded();// this should alert false; 
    </script> 
</body> 
Cuestiones relacionadas