【发布时间】:2021-08-07 13:41:57
【问题描述】:
我有一个带有DOMContentLoaded 事件处理程序的脚本—
document.addEventListener('DOMContentLoaded', function() {
console.log('Hi');
});
我正在异步加载——
<script async src=script.js></script>
但是,事件处理程序永远不会被调用。如果我同步加载它——
<script src=script.js></script>
效果很好。
(即使我将 DOMContentLoaded 事件更改为 load 事件,它也永远不会被调用。)
什么给了?无论浏览器如何加载脚本,都应该注册事件处理程序,不是吗?
编辑:它不适用于 Chrome 18.0.1025.11 测试版,但使用DOMContentLoaded,它可以在 Firefox 11 测试版上运行(但使用 load 它没有)。去图吧。
哦,伟大的 JAVASCRIPT 和 DOM 之王,请向我展示我的方式的错误!
【问题讨论】:
-
通过异步加载脚本,您告诉浏览器它可以独立于页面的其他部分加载该脚本。这意味着页面可能会完成加载,并且可能会在您的脚本加载之前和注册事件之前触发 DOMContentLoaded。如果发生这种情况,您将错过该活动(在您注册时已经发生)。
-
哦——有趣。所以我真的应该测试已经触发的事件——(edit:实际上,因为我依赖于触发脚本之后的事件,所以它不应该是异步的全部)。凉爽的。把它写成答案,你就可以投票了:)
标签: javascript dom onload