我使用基于this page的脚本标记长轮询技术实现Comet。继我的previous question后,我已经完成了所有工作,除了一个烦恼,只发生在Firefox。Firefox不执行一个动态加载的<script>元素,直到加载另一个元素
在初始页面加载我的Comet客户端的JavaScript发送两个请求到彗星服务器(在动态生成<script>
标签被添加到DOM的形式):
get_messages
- 这是正在进行的调查来自应用程序的消息。initialise
- 这是启动时的一次性请求。
这两个发生在同一时间 - 也就是说,他们两个的<script>
标签存在于DOM相同。 (我可以在Firebug DOM检查器中看到它们)。服务器立即发送一些脚本作为对initialise
请求的响应,但它不会发送任何请求给get_messages
请求,除非实际上有消息,这可能需要一段时间。
在Firefox 3.5中<script>
标记为initialise
请求返回的脚本没有得到执行,直到其他<script>
标记(get_messages
)还加载!在Chrome 3和IE 8中,这种方式运行良好 - 只要收到脚本,脚本就会立即执行。
为什么Firefox会这样做,我该如何解决?我想我可以尝试通过在initialise
响应的同时发送一个虚拟的“消息”来解决它在服务器上的问题,但这是相当黑客。如果可能,我想理解并正确解决此问题。
谢谢,这是有道理的。不幸的是,它并不能解决我的问题,因为get_messages请求会在任何给定的时间运行,并且可以随时发送新的订阅请求。 我不得不在原帖(还有一些)中提到的黑客攻击,这让它工作。我还没有在IE6中测试过,但幸运的是这是给内部用户使用的,IE6不受支持。 – EMP 2009-11-29 22:12:28