关于DOMContentLoaded的疑惑

JavaScript高级程序设计(第3版)里面提到

而DOMContentLoaded事件则在形成完成的DOM树之后就会触发,不会理会图像,JavaScript文件,css文件或其他资源是否已经下载完毕

那个,注册这个事件的代码,我应该放在哪里呢?
是放在 html文件里面呢?还是放在单独的js文件里?

我考虑到的是放在单独的js文件里.但是问题在于,这个事件不会等待所有的资源都下载完毕,那这样就会出现触发了
DOMContentLoaded事件,然后我的js文件才下载下来.这就很困惑了

请大家赐教啊~!

阅读 4.1k
3 个回答

原文:The DOMContentLoaded event is fired when the initial HTML document has been completely loaded and parsed, without waiting for stylesheets, images, and subframes to finish loading.

并没有包含js文件,所以还是会等待所有静态的js(非动态插入的js)文件执行完之后才会出发这个DOMContentLoaded事件的。

要详细了解,可以参考这篇文章,写的非常清晰JS、CSS以及img对DOMContentLoaded事件的影响

DOM树形成时,JS文件已经下载完了(你要是把JS文件放在html标签的外面,那就另说了)。

DOM树形成是解析到html的闭合标签,而正常的JS是在html标签内的,并且JS是阻塞加载,在没有加载完成时,是不会解析后面的内容的。

想一下你在页面里的<script></script>和<link/>元素是在<html>元素内部的,DOM树的形成从<html>开始一直解析到</html>元素,当解析到<script></script>和<link/>元素时就会下载这些文件,所以你的担心是多余的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题