Javascript DOMContentLoaded上的document.readyState?

Javascript DOMContentLoaded上的document.readyState?,javascript,dom,cross-browser,dom-events,Javascript,Dom,Cross Browser,Dom Events,在支持事件DOMContentLoaded和属性document.readyState的浏览器中: 当触发DOMContentLoaded时,我是否可以假定document.readyState的值将始终是“complete”或“interactive”/ (或者可能是document.readyState有时仍然具有值“加载”) 在您的回答中,请提供权威来源的参考 你可能会想:为什么不直接听readystatechange?这是因为Android 2.3.5标准浏览器是一个目标平台,它没有实现

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

当触发
DOMContentLoaded
时,我是否可以假定
document.readyState
的值将始终是
“complete”
“interactive”
/

(或者可能是
document.readyState
有时仍然具有值
“加载”

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


你可能会想:为什么不直接听
readystatechange
?这是因为Android 2.3.5标准浏览器是一个目标平台,它没有实现
readystatechange
事件。

当触发
DOMContentLoaded
时,
readyState
属性的值总是
“interactive”
。MDN声称:


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

当触发
DOMContentLoaded
时,
readyState
属性的值至少是
“interactive”
。正如@MTCoster所指出的,事件被延迟,直到具有
defer
属性和
module
脚本(链接或内联)的链接脚本执行为止。另请参见。

根据公认的答案:


当触发
DOMContentLoaded
时,
readyState
属性的值始终为
交互式“

错误 它具有以下任一特性:

  • 交互式
  • 完成
文档。readyState

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

如果在文档具有状态
interactive
之前将事件侦听器附加到
readystatechange
,则可以单独检查
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',…)

为什么不听听
DOMContentLoaded
?;-)我很确定Android 2.3支持readystatechange事件,但只是使用loaded而不是interactive/complete。我会调查并获取back.UPDATE-事实上你是正确的。我在这里做了一个小测试:但我从document.readyState获得的唯一值是加载和加载。不幸的是,这在Android 2.3.5上不正确。我只是做了一个测试t、 结果完全出乎我的意料:当触发
DOMContentLoaded
时,
document.readyState
的值是
“加载”
(即既不是
“完成”
,也不是
“交互”
,也不是
“加载”
).@feklee这一定是因为没有子资源,在这种情况下,DOMContentLoaded和load事件同时启动。请仔细查看我链接的规范。@feklee我很好奇;就您的问题而言,这个答案并不完全准确。您为什么接受它?更重要的是,您是如何解决问题的?谢谢请注意,这是一个非常古老的答案,但有一个细微的差别确实让我感到惊讶。
readyState
设置为
interactive
,然后对带有
defer
属性的脚本进行求值,而
DOMContentLoaded
则在求值之后触发。@MTCoster我正在使用脚本自动化浏览器,并且此注释是了解readyState interactive和webnavigation.onDomContentLoaded之间的区别非常有帮助。谢谢!
if (document.readyState !== 'loading')
    assert(document.readyState === 'interactive')