fek*_*lee 7 javascript dom cross-browser dom-events
在支持事件DOMContentLoaded和属性的浏览器中document.readyState:
当
DOMContentLoaded火灾,我可以假设的价值document.readyState永远是两种"complete"或"interactive"/"loaded"?(或者可能
document.readyState有时仍然有价值"loading"?)
在您的回答中,请提供权威来源的参考.
你可能想知道:为什么不听readystatechange呢?这是因为Android 2.3.5标准浏览器是一个目标平台,并没有实现该readystatechange事件.
该readyState属性的值始终"interactive"在DOMContentLoaded触发时.MDN 文档证明了这一点声称:
// alternative to DOMContentLoaded event
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
initApplication();
}
}
Run Code Online (Sandbox Code Playgroud)
可以与DOMContentLoaded处理程序互换.你也可以看看这里的规范,重申这一点.
小智 5
根据接受的答案:
readyState属性的值总是"interactive"在DOMContentLoaded触发时。
它具有以下任一项:
interactivecomplete文档 。准备状态 参考。
"loading"在文档加载时返回,"interactive"一旦完成解析但仍在加载子资源,以及"complete"一旦加载。
如果readystatechange 在Document 具有状态之前附加一个事件侦听器,则interactive可以interactive单独检查,例如来自 MDN 的示例。然后,如果它到达它,就会捕获该状态。
但是,如果在稍后阶段检查状态,则不会。
同样来自 MDN 的例子,这些是相等的:
document.onreadystatechange = function () {
if (document.readyState === 'interactive') {
initApplication();
}
}
document.addEventListener("DOMContentLoaded", function () {
initApplication();
});
Run Code Online (Sandbox Code Playgroud)
这并不意味着:
if (document.readyState !== 'loading')
assert(document.readyState === 'interactive')
Run Code Online (Sandbox Code Playgroud)
答案表明。
至于说:
document.addEventListener("DOMContentLoaded", ...永远不会等于:
window.addEventListener('load', ...