在我的网站上,我使用 javascript 模块,根据 MDN ,默认情况下这些模块是延迟的。我有一些额外的 javascript,只有在这些模块加载并执行后才能安全执行。MDN在这里指出延迟的脚本执行保证在DOMContentLoaded
事件触发时已经发生。此外,这里建议您还可以考虑此事件已经触发的情况,如下所示:
function doSomething() {
console.info('DOM loaded');
}
if (document.readyState === 'loading') { // Loading hasn't finished yet
document.addEventListener('DOMContentLoaded', doSomething);
} else { // `DOMContentLoaded` has already fired
doSomething();
}
上面的块似乎是我正在寻找的。但是 MDN 上其他地方的文档让我不确定这是否真的正确。例如,为什么readystate
上面的检查寻找loading
而不是loading
OR interactive
?上的文档readystate
说loading
紧随其后interactive
,并且处于“脚本、图像、样式表和框架interactive
等子资源仍在加载”状态。
因此,在我看来,这里存在不一致之处。建议的readystate
检查不足以保证DOMContentLoaded
已触发,或者DOMContentLoaded
不足以保证延迟脚本已完成。