gpt4 book ai didi

javascript - Firefox 不会执行一个动态加载的 <script> 元素,直到加载另一个元素

转载 作者:行者123 更新时间:2023-11-30 13:42:01 25 4
gpt4 key购买 nike

我正在使用脚本标签长轮询技术实现 Comet,基于 this page .继我的 previous question ,我已经完成了所有工作,除了一个烦恼,它只发生在 Firefox 中。

在初始页面加载时,我的 Comet 客户端 JavaScript 向 Comet 服务器发送了两个请求(以动态生成的 <script> 标记的形式附加到 DOM):

  1. get_messages - 这是对来自应用程序的消息的持续轮询。
  2. initialise - 这是启动时的一次性请求。

这两个同时发生 - 即 <script>它们的标签同时存在于 DOM 中。 (我可以在 Firebug DOM 检查器中看到它们。)服务器立即发送一些脚本作为对 initialise 的响应。请求,但它不会为 get_messages 发送任何内容请求直到真正有一条消息,这可能需要一段时间。

在 Firefox 3.5 中,脚本在 <script> 中返回initialise 的标签直到另一个<script>才执行请求标签(对于 get_messages )也加载了!在 Chrome 3 和 IE 8 中这工作正常 - 脚本在收到后立即执行。

为什么 Firefox 会这样做,我该如何解决?我想我可以尝试通过在发送 initialise 的同时发送一条虚拟“消息”来解决服务器上的问题。响应,但这是一个相当黑客。如果可能的话,我想了解并正确解决这个问题。

最佳答案

在我看来是加载顺序的问题。 Firefox 始终确保排队的请求按照请求的顺序执行。 IE NOT 确保这一点(不确定 Chrome)。

无论如何,如果您不应该在初始化代码之后调用 get_messages,那么无论如何您都希望在初始化函数的回调中触发该请求。无论如何你都想这样做,因为其他浏览器也可能不一致。 IE6 在加载顺序方面肯定不像其他浏览器那样工作 - 它不会继续加载 DOM,直到长轮询请求完成,所以你会被困在等待你的长轮询间隔只是为了看到主 DOM 加载。

如果需要详细信息,您可以查看我们的 javascript 客户端的源代码,我们在构建 ASP.NET Comet 服务器 WebSync 时遇到了类似的问题。来源可以在这里查看:

http://sync.frozenmountain.com/client.ashx?debug=true

搜索“ie6”以查看一些解决方法。

关于javascript - Firefox 不会执行一个动态加载的 &lt;script&gt; 元素,直到加载另一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1800232/

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