我使用 DOM 动态地将脚本添加到页面。
如果我添加脚本文本(例如script.text = "...";),它会立即运行。
但是,如果我添加外部脚本(例如script.src = "...";),它将在我的脚本完成后运行。
所以在下面的例子中我会得到
“0 1 2”
和
“3 3 3”
分别。
( 1.js 包含相同的字符串 - "document.body.innerHTML += i")
<body>
<script>
for (i = 0; i < 3; i++) {
var script = document.createElement('script');
script.src = "1.js";
// script.text = "document.body.innerHTML += i";
document.body.append(script);
};
</script>
</body>
Run Code Online (Sandbox Code Playgroud)
我不明白为什么它会这样工作,以及如何在添加后立即运行 1.js?
经过多次尝试,我认为与浏览器的解析有关。script动态添加时,如果src指定,其内容不会立即加载并运行。其内容的运行时间与浏览器不同
以下代码在 chrome、firefox 和 IE8 中运行:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<script>
var script = document.createElement('script')
script.src = './test.js' //test.js alert(2)
document.body.appendChild(script)
alert(3)
</script>
<script>
alert(8)
</script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)
结果:
在IE8、Firefox中,顺序alert是3 2 8
在 Chrome 中,顺序alert是3 8 2
结论:
在 IE8 和 Firefox 中,
您动态添加的内容script将在当前脚本运行完成后运行。
在 Chrome 中,
您动态添加的内容script将在加载其他内容后运行。