文档头中的脚本是否总是在 DOMContentLoaded 触发之前执行



在下面的文档中,

<!doctype html>
<html>
  <head>
    <script language="javascript" src="example.js"></script>
  </head>
  <body>
  </body>
</html>

example.js在哪里:

document.addEventListener('DOMContentLoaded', function () {
    console.log('hello');
});

日志语句是否保证执行?

根据 MDN,

当初始 HTML 文档完全加载和分析时,将触发 DOMContentLoaded 事件,而无需等待样式表、图像和子帧完成加载。

注意:同步 JavaScript 暂停了 DOM 的解析。

在您的情况下,您引用外部 Javascript 文件的方式被视为同步的,即它将在解析之后的元素之前被获取和加载。

所以,答案是,

是的,只要浏览器可以使用外部 JS 文件,它就会始终执行。

<小时 />

如果您指示浏览器应尝试异步下载脚本(通过将async属性设置为 true(,则该事件可能会也可能不会触发您注册的回调。

是的,请参阅 MDN: : 脚本元素

在浏览器继续解析页面之前,将立即获取并执行没有异步或延迟属性的脚本以及内联脚本。

文档在到达末尾之前不会被完全解析,当它遇到 script 标记时,它将停止解析并等待脚本下载(如有必要(并运行,然后再继续。

不过这很糟糕 - 您不想延迟页面的解析和呈现。最好为您的脚本标签提供一个defer(或async(属性 - 这样,一旦解析完成,它将自动运行而不会阻塞,也不需要您将整个脚本包装在 DOMContentLoaded 侦听器中。

相关内容

  • 没有找到相关文章

最新更新