加载comet/server push iframe时停止浏览器"thomber of doom"

Evg*_*eny 33 ajax comet loading progress throbber

使用Comet或Ajax Long Pull技术时 - 通常使用iframe.虽然iframe正在等待关闭的长连接,但浏览器正在旋转它的悸动(进度/加载指示器).

一些网站,例如etherpad.com,设法让它停止.

他们是如何做到的呢?

Evg*_*eny 17

在互联网的内部挖掘了一天一夜之后,我想出了以下内容:

  1. 服务器发送的事件 - 非常酷,目前仅适用于Opera,但可能是HTML5的一部分,其他浏览器可能会支持它.添加内容类型为"application/x-dom-event-stream"的新元素标记,该标记允许服务器客户端DOM中触发事件.据我所知,它不应该显示进度指示器.它也是一个标准的工作草案,而不是像整个iframe彗星那样的黑客.

  2. XMLHttpRequest - 在Firefox和Safari中,但不在IE中,它可以用于长拉页面加载,可以处理每个readyStateChange事件中出现的片段.不会显示进度指标*. - 见下面的评论

  3. ActiveXObject("htmlfile") - 可以在IE中用于创建当前窗口范围之外的页面/窗口.这使得进度指示器消失了!加载的iframe将位于不可见的浏览器中.

有关服务器发送事件的更多信息:

更多关于其他两种技术(也更好地解释了问题):*http://meteorserver.org/browser-techniques/

更深入地了解每种技术和更多技术:

  • 当使用方法(2),XHR时,需要在页面加载完成后调用它.例如,使用setTimeout().如果它在页面完成旋转悸动之前开始,那么它将在加载XHR时继续旋转 - 并且"ESC"可以中止它,所以它很糟糕. (12认同)