2012-07-17 54 views
6

我需要找出窗口是否已經加載。確定窗口是否已經加載而不使用任何全局變量

我想創建一個checkLoaded函數,將返回truefalse來表明這一點,基於我什麼時候調用它。

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

我不想使用窗口加載時設置的全局變量。

有什麼方法可以檢查window對象的狀態,也許屬性?

我不想使用jQuery或任何其他外部庫。

+0

如果你在'onload'處理程序中,窗口完成加載。你的問題是什麼? – jbabey 2012-07-17 17:59:05

+0

我有一個功能和相同的功能應該是真實或錯誤的警報。基於我在哪裏調用它。 Grzegorz Kaczan在下面提到的 – gaurang171 2012-07-17 18:00:02

+0

,你只有兩個事件可以使用。因此,您可以使用最適合您的那些事件來設置您的真/假值來檢查。 它也可能有助於提供一些你想要完成的事情和原因。 「窗口負載」對很多人來說可能意味着很多事情。這兩個基本事件提供函數(){做你喜歡的東西}來完成大多數需求。 – 2012-07-17 18:49:32

回答

20

可以使用document.readyState屬性來檢查文件是否不聽任何事件加載。它將被設置爲"complete"檢查文檔和所有子資源是否已加載。 (這相當於load事件。)

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

如果你只是想檢查,如果該文件已加載,而不用擔心子資源,你也可以檢查,如果該屬性是"interactive"

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

這應該在目前的瀏覽器,但在舊版本的所有瀏覽器不支持。

+0

這正是我在尋找的非常感謝。 – gaurang171 2012-07-19 02:17:52

+1

哪些是「當前」瀏覽器,哪些是「舊」瀏覽器? – Steve 2014-11-19 14:54:20

+5

該代碼檢查文檔是否準備好,而不是窗口加載。有一個區別http://stackoverflow.com/a/8835458/319266 – Krinkle 2015-09-16 00:53:04

1

加載窗口時,這將提醒:

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

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

現在,您可以打電話從您的應用程序的任何部分checkLoaded(),它會返回true或false。

+0

請理解正確的要求。我有一個功能和相同的功能應該是真實的或虛假的。基於我在哪裏調用它。 – gaurang171 2012-07-17 17:59:35

+0

它會跨瀏覽器工作嗎? – Jashwant 2012-07-17 19:23:50

+0

@ keyuratcodebins.com更新了代碼以包含函數 – Paul 2012-07-17 20:27:03

1

你有2個可用的事件:

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

你可以看到那些here

+0

我的問題是我有一個函數checkLoaded,並且我想知道是否加載窗口。在那個函數中查找我已經在兩個不同的地方兩次調用相同函數的代碼。 – gaurang171 2012-07-17 18:05:37

1

也許只是像這樣一個區別:

<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

這是否幫助?

<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> 
相關問題