gpt4 book ai didi

javascript - DOMContentLoaded 上的事件监听器随机触发

转载 作者:行者123 更新时间:2023-11-30 11:59:04 30 4
gpt4 key购买 nike

我在页面上有一个脚本,该脚本大部分时间都在工作,但并非总是如此,我想知道为什么。

此脚本通过以下方式导入:

<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但有时它不会输出其余部分( outerinner )。在页面上进行硬刷新或简单地重新加载它(点击地址栏上的 Enter)似乎不会影响此行为(每种方式的结果相同)。

我还要添加 outerinner总是成对打印,没有一个没有另一个。

我听的方式有问题吗DOMContentLoaded ?或者我必须在 <head> 之外加载脚本吗? (如果可能的话,我宁愿不要这样做)?

最佳答案

async 脚本标签在代码加载后立即执行,无论 DOM 内容是否已加载。所以一般来说,不要将它用于与 DOM 相关的操作。

相反,如果您希望加载文件但仅在 DOMContentLoaded 之后执行代码,请使用 defer 属性。在这种情况下,您的代码中不需要事件监听器:

enter image description here图片来源:http://peter.sh/experiments/asynchronous-and-deferred-javascript-execution-explained/

请注意,defer is buggy in IE9 and below.

关于javascript - DOMContentLoaded 上的事件监听器随机触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119602/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com