2012-05-26 162 views
0

這有不是已被回答herethere。這些問題措辭不佳,答案完全符合「使用DOMReady」的要求。當頁面加載時運行代碼

我想確保代碼只在頁面加載完成時運行。我不能改變的HTML文件本身,但如果我可以,我會做一些事情,達此:

<!DOCTYPE html> 
<html> 
    <head> 
    <script>window.loaded=false;</script> 
    </head> 
    <body onload="window.loaded=true;"> 
    <!-- ... --> 
    </body> 
</html> 

然後在我的代碼:

if (window.loaded) { run(); } 
else { document.addEventListener("load", run); } 

這將實現我想要什麼。不幸的是,我無法修改HTML,這意味着我正在尋找一種方法來確定文檔是否僅從JS代碼加載而不是)。

我環顧了很多地方,但到目前爲止,我發現的所有東西都圍繞着DOMReady展開。沒有人真的找過這個嗎?

+0

總之'DOMReady'並不是HTML5規範中的任何地方,它是一個術語,意味着不同的人在HTML5規範完全開發之前實現它。 – Gareth

回答

3

由於Dr.Molle指出,document.readyState包含屬性你追求:

document . readyState

返回「裝載」,而文件加載,「互動」,一旦它完成解析,但仍在加載子資源,和「完成」一旦它已經加載。

當此值更改時,readystatechange事件在Document對象上觸發。

事件觸發和readyState更改的順序在HTML5規範的end of parsing部分中定義。總結:

  1. readyState是儘快解析完成設置爲"interactive"文件。
  2. 幾乎立即觸發DOMContentReady事件(在確定需要加載哪些資源之後)。
  3. 這些資源已加載。
  4. 將文檔readyState設置爲「完成」並激活load事件。
+0

我已經從我的文章中刪除了一些不正確的信息。 DOMContentLoaded與'readyState =「complete」'不同,如[post-parsing](http://www.whatwg.org/specs/web-apps/current-work/#the-end)部分所述的HTML5規範 – Gareth

+0

確實。所以,我做了這個:https://gist.github.com/2792934。總結一下:DOM加載時運行DOMContentLoaded。加載完成後,'onload'運行。 'readyState'在此之前設置爲'「complete」。因此,你們都是對的,但我仍然想知道所有不同的和模棱兩可的命名:) –

+0

'DOMReady'並不是一個正式的術語,但在HTML5規範到達狀態之前,它現在在人們需要一個術語參考。現在我想很多混淆來自人們將正確的術語與舊名稱混合在一起 – Gareth

3

當DOM和所有ressources(腳本,圖片,樣式表等)已完成加載窗口火災的onload事件:

window.onload=function() 
{ 
    //run code 
} 
+0

是的,它的確如此。但這不是我要問的。如果我的代碼在'onload'事件觸發後運行,則失敗。 –

+0

document.readyState是另一個選項:https://developer.mozilla.org/en/DOM/document.readyState。文檔加載完成後,它將返回「完整」。 –

+0

**不,它不_ _ **。**我特別要求_not_ DOMReady。引用您鏈接到的文檔:「替代DOMContentLoaded」。 –

相關問題