gpt4 book ai didi

javascript - IE9 奇怪的 javascript 执行顺序

转载 作者:行者123 更新时间:2023-11-28 08:45:43 24 4
gpt4 key购买 nike

我正在尝试加载带有某些函数的远程脚本并在 IE9 中内联执行它。但是我遇到了一条错误消息,指出我的函数未定义。

归根结底,IE9(似乎是更低的版本)以与我预期相反的顺序执行脚本。我做了一个简化的示例,但它仍然会产生相同的错误。

<script type="text/javascript" src="multibanner_rev04_tmp.js"></script>
<script type="text/javascript">alert('nr.2');</script>

为了便于阅读,我编辑了一个较长的路径,其中只有一个警报,没有其他内容。

警报“nr.2”在 IE9 中的 multibanner_rev04_tmp.js 中的警报之前执行我已经在多台装有 IE9 的计算机上尝试过此操作,以确保它不是与此相同的问题:IE9 js load order and JQuery

问题似乎是一致的。还在 IE10 上尝试过此操作,它确实按预期顺序执行警报。

我真的不明白这里发生了什么,有什么想法吗?

最佳答案

根据您对问题的评论:

The script is injected onto my page using yet antother script (through an ad-server), so that might be a problem worth checking out.

这与您问题中的实际内容完全不同。您的问题中的内容显示了标记中的脚本标签; 注入(inject)带有 JavaScript 的脚本是完全不同的。

广告脚本可以通过两种方式将脚本添加到网页:

  1. 在主页解析期间使用document.write写出脚本标签。您已经说过您的页面是 XHTML 严格的。在主解析期间使用 document.write 将标记输出到页面在 XHTML 中是无效的,句号。你不能做到。如果它确实有效,则该行为是未指定的,您不应该依赖它。

    如果你想在主页面解析期间使用document.write,你必须停止使用XHTML。此时,脚本将按照解析器看到它们的顺序进行评估(无论它们如何从标记或通过 document.write 放入解析器的输入流中)。

  2. 通过创建 script 元素 (document.createElement('script')),然后将其附加到 DOM。当您执行此操作时,脚本将在可用时立即进行评估。没有订单。就像使用 async attribute 一样在标记中(除了它更跨浏览器可靠)。

    如果脚本是这样添加的,则不能依赖该顺序。如果您控制以这种方式添加的脚本,则可以让该脚本检查其他脚本提供的任何内容,并使用 setTimeout 推迟其执行,直到其他内容出现。如果不这样做,您将不得不延迟添加脚本元素,直到您准备好为止。

关于javascript - IE9 奇怪的 javascript 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com