2012-05-26 159 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”。 –

相关问题