基于此页面 ,我正在使用脚本标签长轮询技术实现Comet。 在上一个问题之后,除了一个烦人的问题 ,我已经全部解决了,这仅在Firefox中发生。
在初始页面加载中,我的Comet客户端JavaScript将两个请求发送到Comet服务器(以动态生成的<script>
标记的形式,这些标记附加到DOM上):
-
get_messages
这是对来自应用程序的消息的持续轮询。
-
initialise
-这是启动时的一次性请求。
这两个同时发生-也就是说,它们的<script>
标记都在DOM中同时存在。 (我可以在Firebug DOM检查器中看到它们。)服务器立即发送一些脚本作为对initialise
请求的响应,但是直到有实际消息出现之前,它不会为get_messages
请求发送任何内容。
在Firefox 3.5中,在initialise
另一个<script>
标记(对于get_messages
)之前,不会执行在<script>
标记中返回的用于initialise
请求的<script>
! 在Chrome 3和IE 8中,它可以正常工作-脚本一收到就立即执行。
为什么Firefox会这样做,我该如何解决? 我想我可以尝试通过在initialise
响应的同时发送一个虚拟“消息”来在服务器上解决该问题,但这确实是一个hack。 如果可能,我想正确理解并解决此问题。