在script标签的onload事件之前执行外部文件中的JavaScript

最后

我读过,这defer不一定会延迟外部脚本的加载,但会延迟脚本的执行,直到HTML解析完毕。

在此处输入图片说明

作为实验,我在包含jQuery的文件的底部添加一行,当执行到达JavaScript的末尾时,该行会发出一个事件:

window.dispatchEvent(new Event('jQuery-executed'));

我在测试页中包含具有defer属性的jQuery文件

<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在script标记上有一个处理程序,可以告诉我何时加载文件,以及其他函数在DOMContentLoaded上输出控制台日志以及何时执行jQuery。

为什么当我查看此页面时得到此信息?

在此处输入图片说明

当然事情应该以不同的顺序发生吗?不应只在包含jQuery的文件加载后才执行jQuery吗?为什么在DOMContentLoaded之前执行它?

尖尖的

HTML5规范很奇怪而且很难阅读,但是它确实说应该在触发“加载”事件之前评估延迟的脚本内容。如果您考虑一下,那确实是一件好事:如果您有一些等待脚本加载的代码,那可能是因为您想使用脚本提供的一些代码。如果在脚本运行之前触发了“ load”事件,那么拥有“ load”处理程序将毫无用处。

“ DOMContentReady”也是如此:等待该事件正确触发的代码期望该页面导入的所有脚本内容已准备好被利用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以确保在窗口onload事件之前执行外部异步/延迟JavaScript?

从javascript onload事件执行managebean方法

Javascript执行onload函数但不触发按钮的onclick事件

<form>标签上的Onload事件

在使用requirejs进行onload加载之前加载javascript文件

Javascript appendChild onload事件

Javascript-onload事件

Internet Explorer中'script'标签的'onload'处理程序

JavaScript-<script>标签的执行顺序

在javascript文件中调用<body onload =“ function()”>

Oracle在插入操作之前触发执行外部文件

如何在纯JavaScript中在外部HTML / SVG文件中执行javascript?

在 PHP 文件中的 <script></script> 标签中编写 JavaScript 是否会使其更安全?

直接在源页面中执行 <script> 标签中加载的 javascript

尝试在脚本标签上触发onload事件

Javascript音频对象onload事件

循环中的javascript onload事件

在 html 文件中添加并执行 xml 标签

在将动态脚本加载到IE 8、9中之前执行window.onload

jQuery在onload上执行onchange事件

在JavaScript中,是否可以在<script> </ script>标记中导入JS模块而不加载外部文件?

javascript中的for循环在get方法执行之前就已执行

Javascript事件执行推迟到队列中

nuxtjs中的外部Javascript文件

Chrome中的调试方法:确定Onload事件结束后执行哪行代码

仅在加载延迟的Javascript外部文件后才执行Javascript?

在执行 addEventListener() 函数之前等待所有动态 script-src 标签加载

在JavaScript中添加外部JavaScript文件

jQuery onLoad事件在任何加载之前触发