2012-07-17 10 views
6

Muszę sprawdzić, czy okno zostało załadowane czy nie.Określanie, czy okno zostało załadowane bez użycia zmiennych globalnych

Chcę utworzyć funkcję checkLoaded, która zwróci true lub false, aby to oznaczyć, w zależności od tego, kiedy ją wywołasz.

<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> 

Nie chcę używać zmiennej globalnej, którą ustawiam przy ładowaniu okna.

Czy jest jakiś sposób, aby sprawdzić stan obiektu window, być może właściwość?

Nie chcę używać jQuery ani żadnych innych zewnętrznych bibliotek.

+0

jeśli jesteś w procedurze 'onload', okno kończy się ładowanie. jakie jest Twoje pytanie? – jbabey

+0

Mam jedną funkcję i ta sama funkcja powinna być ostrzeżona prawda lub fałsz. w oparciu o to, gdzie to nazywam. – gaurang171

+0

jak wspomina Grzegorz Kaczan, masz tylko dwa zdarzenia do pracy. Możesz więc wykorzystać dowolne z tych zdarzeń, które najlepiej pasują do Ciebie, aby sprawdzić wartości true/false, które chcesz sprawdzić. Może to również pomóc w określeniu kontekstu tego, co próbujesz osiągnąć i dlaczego. "Obciążenie okna" może oznaczać wiele rzeczy dla wielu osób. a te dwa podstawowe zdarzenia zapewniają funkcję() {rób, co lubisz), aby spełnić większość potrzeb. –

Odpowiedz

20

Można użyć właściwości document.readyState aby sprawdzić, czy dokument został załadowany nie słuchając żadnych wydarzeń. Zostanie ustawiony na "complete" sprawdź, czy dokument i wszystkie źródła są załadowane. (Odpowiada przypadku load.)

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

Jeśli chcesz tylko sprawdzić, czy dokument został załadowany, bez martwienia się o subresources, można również sprawdzić, czy nieruchomość jest "interactive".

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

Powinno działać w obecnych przeglądarkach, ale nie jest obsługiwane w starszych wersjach wszystkich przeglądarek.

+0

to jest dokładnie to, czego szukam, bardzo dziękuję. – gaurang171

+1

Jakie są "aktualne" przeglądarki, a które są "starszymi" przeglądarkami? – Steve

+5

Ten kod sprawdza gotowy dokument, a nie obciążenie okna. Istnieje różnica http://stackoverflow.com/a/8835458/319266 – Krinkle

1

To ostrzegać, gdy okno jest ładowany:

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

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

Teraz można nazwać checkLoaded() z dowolnej części aplikacji i powróci prawdziwe lub fałszywe.

+0

proszę zrozumieć wymaganie poprawnie.Mam jedną funkcję i ta sama funkcja powinna być ostrzeżona, prawda lub fałsz. w oparciu o to, gdzie to nazywam. – gaurang171

+0

Czy to działa w przeglądarce? – Jashwant

+0

@ keyuratcodebins.com zaktualizował kod, aby dołączyć funkcję – Paul

1

Masz 2 wydarzenia dostępny:

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

Widać różnicę w tych here

+0

moje pytanie to mam funkcję checkLoaded i chcę wiedzieć, czy okno jest załadowane czy nie. w tej funkcji zajrzyj do kodu, w którym nazwałem tę samą funkcję dwa razy w dwóch różnych miejscach. – gaurang171

1

Może po prostu coś takiego:

<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

Czy to pomoże?

<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> 
Powiązane problemy