脚本在 Chrome 中无序加载

Col*_*lin 5 html javascript

我有一个外部脚本,然后在我的<body>. 根据这个答案,看起来内联脚本在外部脚本之前运行,这是不应该发生的:

如果您没有动态加载脚本或将它们标记为延迟或异步,则脚本将按照页面中遇到的顺序加载。无论是外部脚本还是内联脚本都无关紧要 - 它们按照在页面中遇到的顺序执行。在外部脚本之后的内联脚本被保留,直到它们之前的所有外部脚本都加载并运行。

源代码:https : //stackoverflow.com/a/8996894/114855

这是我的代码:

  <script src="https://checkout.stripe.com/checkout.js"></script>
  <script>
  var handler = StripeCheckout.configure({
    key: 'pk_live_HhFqemZFyEUJVorFzYvjUK2j',
    token: function(res) {
      $('#pay_token').val(res.id);
      $('#pay_email').val(res.email)
      $('#pay_amount').val(parseFloat($("#amount").val())*100);
      $('#pay_description').val($("#description").val());
      $('#pay_real').submit();
    }
  });

  /* .. */
  </script>

</body>
Run Code Online (Sandbox Code Playgroud)

控制台显示 StripeCheckout 未定义(外部脚本应定义)

安慰

这是有道理的,因为网络选项卡显示我的外部请求仍在等待中。但我不确定为什么浏览器没有等待 checkout.js 被获取:

网络

Eri*_* J. 2

对所引用问题中两个答案的评论表明,所接受的答案不受标准参考的支持(适用于所有常见的浏览器版本),并且实际上可能并不总是适用于所有浏览器。

我可以确认这种行为。但我们的反馈页面上有提示,它可能仅在 test.php 被缓存时才有效。您知道有关此的任何规格/参考链接吗?

这个答案是不正确的。情况并不总是“动态添加的脚本在附加到文档后立即执行”。有时确实如此(例如对于旧版本的 Firefox),但通常情况并非如此。正如 jfriend00 的回答中提到的,执行顺序是不确定的

为了完全安全,请等到DOM 完全渲染后再运行脚本。