动态添加javascript以立即执行

Ill*_*lia 5 javascript dom

我使用 DOM 动态地将脚本添加到页面。

  1. 如果我添加脚本文本(例如script.text = "...";),它会立即运行。

  2. 但是,如果我添加外部脚本(例如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?

Ker*_*mit 1

经过多次尝试,我认为与浏览器的解析有关。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中,顺序alert3 2 8

在 Chrome 中,顺序alert3 8 2

结论:

在 IE8 和 Firefox 中,

您动态添加的内容script将在当前脚本运行完成后运行。

在 Chrome 中,

您动态添加的内容script将在加载其他内容后运行。