加载页面时运行代码

Fél*_*lli 1 javascript load

这里那里没有回答这个问题。这些问题措辞不佳,答案都是“使用DOMReady”。

我想确保代码仅在页面加载完成后运行。我不能改变 HTML 文件本身,但如果可以,我会做一些这样的事情:

<!DOCTYPE html>
<html>
  <head>
    <script>window.loaded=false;</script>
  </head>
  <body onload="window.loaded=true;">
    <!-- ... -->
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后在我的代码中:

if (window.loaded) { run(); }
else { document.addEventListener("load", run); }
Run Code Online (Sandbox Code Playgroud)

这将实现我想要的。不幸的是,我无法修改 HTML,这意味着我正在寻找一种仅从 JS 代码确定文档是否已加载而不是DOM 是否已准备就绪)的方法。

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

Gar*_*eth 5

正如 Dr.Molle 指出的那样,document.readyState包含您所追求的属性:

document . readyState

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

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

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

  1. 解析完成后,文档readyState就设置"interactive"为 。
  2. DOMContentReady事件几乎立即触发(在确定需要加载哪些资源之后)。
  3. 这些资源已加载。
  4. 文档readyState设置为“完成”并load触发事件。