1

在这里那里没有回答。这些问题措辞不佳,答案都是“使用 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 代码加载(如果 DOM 已准备好则不加载)。

我环顾四周,但到目前为止,我发现的一切都围绕着 DOMReady。真的没有人找过这个吗?

4

2 回答 2

5

正如Molle 博士所指出的,document.readyState包含您所追求的属性:

document . readyState

在文档加载时返回“正在加载”,在完成解析但仍在加载子资源后返回“交互”,在加载后返回“完成”。

当此值更改时,将在 Document 对象上触发该readystatechange事件。

事件触发和 readyState 更改的顺序在 HTML5 规范的解析部分末尾定义。总之:

  1. 解析完成后立即将文档readyState设置为。"interactive"
  2. DOMContentReady事件几乎立即触发(在确定需要加载哪些资源之后)。
  3. 这些资源已加载。
  4. 文档readyState设置为“完成”并load触发事件。
于 2012-05-26T08:09:21.703 回答
3

当 DOM 和所有资源(脚本、图像、样式表等)完成加载时,会触发窗口的 onload 事件:

window.onload=function()
{
  //run code 
}
于 2012-05-26T07:55:28.687 回答