支持事件DOMContentLoaded
和属性document.readyState
的浏览器:
当
DOMContentLoaded
触发时,我可以假设document.readyState
的值始终为"complete"
或"interactive"
/"loaded"
吗?(或者可能是
document.readyState
有时仍然具有值"loading"
?)
在您的回答中,请提供权威来源的参考。
您可能想知道:为什么不只听readystatechange
?这是因为Android 2.3.5标准浏览器是目标平台,并且它没有实现readystatechange
事件。
答案 0 :(得分:8)
readyState
触发时,"interactive"
属性的值始终为DOMContentLoaded
。 MDN documentation声称:
// alternative to DOMContentLoaded event
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
initApplication();
}
}
可与DOMContentLoaded
处理程序互换。您还可以查看规范here,重申这一点。
答案 1 :(得分:2)
根据接受的答案:
1-test-test@gmail.com
触发后,readyState
属性的值始终为"interactive"
。
它具有以下任一特征:
DOMContentLoaded
interactive
文档。 readyState ref.
在加载文档时返回
complete
,在完成解析但仍在加载子资源时返回"loading"
,在文档加载后返回"interactive"
。
如果将事件监听器附加到"complete"
之前 ,文档的状态为readystatechange
,则可以单独检查interactive
,例如以MDN为例。这样一来,只要有人到达状态,就会抓住它。
但是如果以后再检查状态,则不会。
例如,来自MDN的这些都相等:
interactive
这并不意味着:
document.onreadystatechange = function () {
if (document.readyState === 'interactive') {
initApplication();
}
}
document.addEventListener("DOMContentLoaded", function () {
initApplication();
});
答案提示。
可以说:
if (document.readyState !== 'loading')
assert(document.readyState === 'interactive')
永远不会等于:
document.addEventListener("DOMContentLoaded", ...
答案 2 :(得分:0)