首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部文件中的JavaScript在脚本标记的onload事件之前执行

问外部文件中的JavaScript在脚本标记的onload事件之前执行
EN

Stack Overflow用户
提问于 2017-07-27 13:15:52
回答 1查看 1.9K关注 0票数 2

我已经读过,defer不一定会延迟加载外部脚本,但是它将推迟脚本的执行直到解析完之后。

​

​

作为一个实验,我在包含jQuery的文件底部添加了一行,该文件在执行到JavaScript结束时发出一个事件:

代码语言:javascript
复制
window.dispatchEvent(new Event('jQuery-executed'));

我在测试页面中包含了带有jQuery属性的defer文件:

代码语言:javascript
复制
<script src="jquery-3.2.1.js" defer onload="console.log('jQuery loaded', Date.now());"></script>
<script>
    window.addEventListener('DOMContentLoaded', function(){
        console.log('DOMREADY', Date.now());
    });

    window.addEventListener('jQuery-executed', function(){
        console.log('jQuery executed', Date.now());
    });
</script>

我在脚本标记上有一个onload处理程序来告诉我文件何时加载,其他函数输出控制台记录在DOMContentLoaded上以及何时执行jQuery。

为什么当我看到这个页面时,我会得到这个?

​

​

事情一定会以不同的顺序发生吗?难道jQuery不应该只在包含它的文件加载之后才执行吗?为什么要在DOMContentLoaded之前执行呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-27 13:44:21

HTML5规范很奇怪,很难读懂,但它确实说,在触发"load“事件之前,应该对延迟的脚本内容进行评估。如果您仔细想想,这确实是件好事:如果您有一些等待脚本加载的代码,这可能是因为您希望使用脚本提供的一些代码。如果在脚本运行之前触发了"load“事件,那么拥有一个"load”处理程序就不太有用了。

“DOMContentReady”也是如此:等待事件触发的代码期望页面导入的所有脚本内容都可以被利用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45351934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档