CometまたはAjaxLongPullテクニックを使用する場合、通常はiframeが使用されます。そして、そのiframeが長い接続が閉じるのを待っている間、ブラウザーはそのスロバー(進行状況/読み込みインジケーター)を回転させています。
いくつかのウェブサイト、例えばetherpad.comは、なんとかそれを止めさせました。
どうやってやっているの?
インターネットの根性を昼夜掘り下げた後、私が思いついたのは次のとおりです。
サーバー送信イベント-非常にクールで、現在Operaでのみ機能しますが、HTML5の一部である可能性があり、他のブラウザーがいつかそれをサポートする可能性があります。「application/x-dom-event-stream」のコンテンツタイプを持つ新しい要素タグを追加します。これにより、サーバーはクライアントDOMでイベントを発生させることができます。そして、私が理解している限り、進行状況インジケーターを表示するべきではありません。これは標準の草案でもあり、iframe彗星全体のようなハックではありません。
XMLHttpRequest-FirefoxとSafariでは、IEでは使用できません。これは、各readyStateChangeイベントに表示されるフラグメントを処理できるロングプルページの読み込みに使用できます。進行状況インジケーター*は表示されません。-以下のコメントを参照してください
ActiveXObject( "htmlfile")-IEで使用して、現在のウィンドウスコープ外のページ/ウィンドウを作成できます。これにより、進行状況インジケーターが消えます!ロードされたiframeは非表示のブラウザになります。
server-sent-eventsの詳細:
そして、他の2つのテクニックについての詳細(問題をよりよく説明します):* http://meteorserver.org/browser-techniques/
各テクニックについてさらに深く、そしてより多くのテクニック:
私の場合、ajaxリクエストでsetTimeoutを実行すると、すべてが解決しました。document.readyからリクエストを実行すると、「運命のドキドキ」が発生しました。しかし、setTimeoutではそれは起こりません。(この修正はChromeでも機能します)。
いくつかの例が必要になる場合に備えて、この男は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');