10

在支持事件DOMContentLoaded和属性的浏览器中document.readyState

发生火灾时DOMContentLoaded,我可以假设 的值document.readyState始终是"complete"or "interactive"/"loaded"吗?

(或者可能document.readyState有时仍然具有价值"loading"?)

在您的回答中,请提供对权威来源的参考。

你可能想知道:为什么不只是听readystatechange呢?因为Android 2.3.5标准浏览器是目标平台,没有实现readystatechange事件。

4

3 回答 3

10

财产的价值readyState总是"interactive"DOMContentLoaded被解雇的时候。MDN文档声称:

// alternative to DOMContentLoaded event
document.onreadystatechange = function () {
  if (document.readyState == "interactive") {
    initApplication();
  }
}

可与DOMContentLoaded处理程序互换。您也可以在此处查看规范,它重申了这一点。

于 2012-11-12T15:45:12.943 回答
5

根据接受的答案:

财产的价值readyState总是"interactive"DOMContentLoaded被解雇的时候。

错误的

它具有以下任一项:

  • interactive
  • complete

文档 。就绪状态 参考。

"loading"在 Document 加载时返回,"interactive"一旦完成解析但仍在加载子资源,以及"complete"一旦加载。

如果在Document 具有状态readystatechange 之前附加一个事件侦听器,interactive则可以单独检查interactive,例如 MDN 中的示例。然后,如果它到达它,就会捕获该状态。

但是,如果在稍后阶段检查状态,则不是。

同样来自 MDN 的示例,这些是相等的:

document.onreadystatechange = function () {
  if (document.readyState === 'interactive') {
    initApplication();
  }
}


document.addEventListener("DOMContentLoaded", function () {
    initApplication();
});

这并不意味着:

if (document.readyState !== 'loading')
    assert(document.readyState === 'interactive')

答案表明了这一点。

话说:

  • document.addEventListener("DOMContentLoaded", ...

永远不会等于:

  • window.addEventListener('load', ...
于 2020-05-16T15:38:11.177 回答
0

readyState属性的价值至少是在"interactive"DOMContentLoaded解雇时。正如@MTCoster 在这里指出的那样,该事件被推迟到具有defer属性和module脚本的链接脚本(链接或内联)已执行。另见这篇文章

于 2020-03-24T11:26:47.950 回答