提问者:小点点

脚本加载在Chrome


我在的底部有一个外部脚本,后跟一个内联脚本

如果您没有动态加载脚本或将其标记为延迟或异步,那么脚本将按照页面中遇到的顺序加载。不管是外部脚本还是内联脚本,它们都是按照在页面中遇到的顺序执行的。外部脚本之后的内联脚本将一直保留,直到之前的所有外部脚本都已加载并运行。

Src: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>

控制台显示没有定义StripeCheckout(外部脚本应该定义)

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


共2个答案

匿名用户

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

我可以证实这种行为。但在我们的反馈页面上有提示,它可能只在测试时起作用。php是缓存的。你知道这方面的规范/参考链接吗?

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

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

匿名用户

啊哈-我已经弄明白了!

这是运行TurboLink的rails应用程序的一部分。

TurboLink动态更改正文内容,而不是每次单击链接时创建新请求。这意味着将动态插入我的脚本标记,并且无法保证它们按顺序运行。

由于TurboLink不会对每个请求重新评估脚本标记,因此我认为最简单/最好的解决方案是在

我还认为TurboLink可以通过找到一种按顺序运行脚本的方法来解决这个问题。我计划跟进他们github上的一个问题,并将相应地在这里更新。