Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome中的脚本加载顺序错误_Javascript_Html - Fatal编程技术网

Javascript Chrome中的脚本加载顺序错误

Javascript Chrome中的脚本加载顺序错误,javascript,html,Javascript,Html,我在的底部有一个外部脚本,后跟一个内联脚本。根据以下回答,内联脚本似乎在外部脚本之前运行,这是不应该发生的: 如果您没有动态加载脚本或将其标记为延迟或 异步,然后按照页面中遇到的顺序加载脚本。 不管它是外部脚本还是内联脚本 -它们按照在页面中遇到的顺序执行。外部脚本之后的内联脚本将保留到 之前的所有外部脚本都已加载并运行 Src: 这是我的代码: <script src="https://checkout.stripe.com/checkout.js"></script&g

我在
的底部有一个外部脚本,后跟一个内联脚本。根据以下回答,内联脚本似乎在外部脚本之前运行,这是不应该发生的:

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

Src:

这是我的代码:

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

var handler=StripeCheckout.configure({
关键字:“pk_live_HhFqemZFyEUJVorFzYvjUK2j”,
令牌:函数(res){
$('pay#u token').val(res.id);
$('pay#u email').val(res.email)
$(“#支付金额”).val(parseFloat($(“#金额”).val())*100);
$('pay#u description').val($('pay#description').val());
$('pay#u real')。提交();
}
});
/* .. */
控制台显示未定义StripeCheckout(外部脚本应定义)

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


引用问题中对两个答案的评论表明,被接受的答案没有标准参考(适用于所有常见的浏览器版本),事实上,可能并非所有浏览器都适用

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

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


为了完全安全,在运行您的脚本之前,请等到服务器启动。

啊哈-我已经找到了答案

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

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

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


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

在文档的
标题中加载外部文件并不决定脚本的执行顺序?@Leo:是否每个常见的浏览器都实现了html5规范?可能没有:-(-虽然有趣的是Chrome不知怎么错过了它。看看规范,它说的是“每个脚本元素都有一个src属性”.我觉得有点误导。在过去的几年里,我一直在慢慢地看着它变蓝,但仍然有IE 7、8、9…和其他浏览器的旧版本没有完全实现规范。旧浏览器对我不感兴趣。我很幸运地说,这只是历史:-)-Chrome没有达到标准让我担心。我们必须提交(另一个)错误报告,还是?