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没有达到标准让我担心。我们必须提交(另一个)错误报告,还是?