我的页面上有一个脚本,大部分时间都在工作,但并不总是如此,我想知道原因。
此脚本通过以下方式导入:
<script src="script.js" async></script>` tag in `<head>
脚本的内容是:
console.log("loading"); // always gets printed
document.addEventListener("DOMContentLoaded", function() {
console.log("outer"); // sometimes get not printed
(function() {
console.log("inner"); // sometimes get not printed
})();
});
浏览器控制台始终输出loading
,但有时它不输出其余内容(outer
和inner
)。在页面上进行硬刷新或者只是重新加载它(在地址栏上点击Enter
)似乎不会影响这种行为(每种方式都有相同的结果)。
我还要补充一点,outer
和inner
总是按对打印,没有另一个没有。
我在听DOMContentLoaded
的方式有问题吗?或者我是否必须在<head>
之外加载脚本(如果可能的话我不想这样做)?
答案 0 :(得分:2)
async
脚本标记。所以一般情况下,不要将它用于与DOM相关的操作。
相反,如果您希望加载文件但仅在DOMContentLoaded
之后执行代码,请使用defer
属性。在这种情况下,您不需要在代码中使用事件监听器:
图片来源:http://peter.sh/experiments/asynchronous-and-deferred-javascript-execution-explained/
答案 1 :(得分:1)
你的脚本在 之后执行了触发了DOMContentLoaded事件,因此设置一个监听器为时已晚。