jquery 通过JavaScript向动态生成的脚本标记添加defer或async属性

vcirk6k6  于 2023-04-05  发布在  jQuery
关注(0)|答案(2)|浏览(216)

我动态地把一个脚本标记到我的页面的DOM中,如下所示:

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

这应该会生成如下内容:

<script src="https://www.youtube.com/iframe_api"></script>

我只是想在这个脚本标签中放入一个deferasync,如下所示:

<script src="https://www.youtube.com/iframe_api" defer async></script>

那么,如何使用JavaScript来实现这一点呢?

7kqas0il

7kqas0il1#

不需要将async添加到script标记中,因为动态脚本默认启用了该属性。
至于defer,就像你在JavaScript中修改src属性一样,你也可以像这样启用它:

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
tag.defer = true;
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

或者,您可以使用setAttribute()

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
tag.setAttribute('defer','');
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
cnwbcb6i

cnwbcb6i2#

为了异步加载动态脚本,但按定义的顺序执行它们,请使用script.async = false

['1.js', '2.js'].forEach(s => {
   const script = document.head.appendChild(document.createElement('script'));
   script.async = false;
   script.src = s;
});

来源:https://web.dev/speed-script-loading/#the-dom-to-the-rescue

相关问题