当使用 Comet 或 Ajax Long Pull 技术时 - 通常使用 iframe。当 iframe 等待长连接关闭时,浏览器正在旋转其 throbber(进度/加载指示器)。

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

他们是如何做到的呢?

有帮助吗?

解决方案

在网上查了一天一夜后,我得出了以下结论:

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

  2. XMLHttpRequest - 在 Firefox 和 Safari 中,但在 IE 中则不然,它可用于长拉页面加载,从而能够处理出现在每个 readStateChange 事件上的片段。不会显示进度指示器*。-- 请参阅下面的评论

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

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

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

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

其他提示

对我来说,其上运行的AJAX请求的setTimeout解决一切。当我运行的document.ready的要求,我得到了“厄运的活动指示器”。但随着setTimeout的它不会发生。 (此修复也可为铬)。

就在那你可能需要一些例子的情况下,这家伙没有给出一个解决方案来解决Firefox的问题。 http://www.shanison.com/?p=237

我有同样的问题,并且解决方案是使用而不是隐藏的iframe Ajax的。因此,而不是在页面某处产生的iframe:

$("#chat .msg_list").prepend('<iframe id="hidden" src="chatFrame?id=$userId" frameborder="0" height="0" width="100%"></iframe>');

我使用的jquery AJAX调用的iframe内容加载到一些DIV:

$('#chat #chat_comet').load('chatFrame?id=$userId');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top