如何通过javascript将type属性注入到所有脚本标记中

How to inject type attribute into all script tags via javascript

本文关键字:脚本 注入 javascript 何通过 type 属性      更新时间:2023-09-26

我想知道如何查询所有脚本标记并设置随机属性。我所尝试的不起作用:

document.getElementsByTagName("script")[0].setAttribute("data-foo", "bar");

它只匹配第一个脚本标记。(请不要jQuery。我喜欢它,但现在不行。它还需要跨浏览器,所以querySelectorAll不起作用)。

编辑:

好吧,事实证明,纯JavaScript查询选择器只在加载时选择内容(正如Kolink所指出的和系统所解释的)。因此,我必须在其他脚本标记之后添加设置属性的脚本。

一种可能性是使用document.write将其他脚本动态写入页面。

这是document.write非常有用的经典情况。

// In main/powerhouse
// list of script sources
var scripts = ["script1.js", "script2.js", "script3.js"]
for (var i = 0; i < scripts.length; i++)
    document.write('<scr', 'ipt type="text/javascript" src="', scripts[i], '"></scr', 'ipt>');

现在,脚本将在当前运行的脚本之后编写,并将按预期同步加载。

你不能。

请看,当"主"脚本运行时,其他脚本还不存在。

唯一的解决方案是用onloadDOMContentLoaded事件推迟类型设置。

问题是,到启动时,其他脚本将被添加到页面中,要么运行(大多数浏览器),要么被忽略(旧的IE)。在此阶段对它们设置type没有任何效果。

因此,与其试图找到永远不会奏效的解决方案,为什么不首先尝试编写正确的HTML呢?

PS。你对它在IE8中不起作用的评论表明你处于Quirks模式。如果您还没有<!DOCTYPE>,请添加它。