Comet/サーバープッシュ iframe の読み込み中にブラウザの「破滅の鼓動」を停止する
質問
Comet または Ajax Long Pull テクニックを使用する場合、通常は iframe が使用されます。そして、その iframe が長い接続が終了するのを待っている間、ブラウザはそのスロバー (進行状況/読み込みインジケーター) を回転させています。
etherpad.com などの一部の Web サイトは、なんとか停止させました。
どうやってやっているの?
解決
一昼夜インターネットの奥深くを掘り下げた結果、私が思いついたのは次のとおりです。
サーバー送信イベント - 非常にクールで、現在は Opera でのみ動作しますが、HTML5 の一部となる可能性があり、他のブラウザでもいつかサポートされる可能性があります。content-type が「application/x-dom-event-stream」の新しい要素タグを追加します。 サーバ でイベントを発生させる クライアントDOM. 。私の理解する限り、進捗状況を示すものではないはずです。これは標準の草案でもあり、iframe Comet 全体のようなハッキングではありません。
XMLHttpRequest - Firefox および Safari では使用できますが、IE では使用できません。ロングプル ページの読み込みに使用でき、各readyStateChange イベントに表示されるフラグメントを処理できるようになります。進行状況インジケーターは表示されません*。-- 以下のコメントを参照
ActiveXObject("htmlfile") - IE で使用して、現在のウィンドウ スコープの外側にページ/ウィンドウを作成できます。これにより、進行状況インジケーターが消えます。ロードされた iframe は非表示のブラウザーに表示されます。
サーバー送信イベントの詳細:
他の 2 つの手法についても詳しく説明します (問題についても詳しく説明しています)。* http://meteorserver.org/browser-techniques/
各テクニックとその他のテクニックについてさらに詳しく説明します。
他のヒント
私にとっては、AJAX要求にsetTimeoutメソッドを実行すると、すべてを解決しました。私はdocument.readyからの要求を実行したとき、私は「運命のスロバー」を得ました。しかし、setTimeoutメソッドでそれは起こりません。 (この修正は、クロームのために動作します)。
ちょうどあなたはいくつかの例を必要とするかもしれない場合には、この男は、Firefoxの問題を解決するための溶液を得ました。 http://www.shanison.com/?p=237する
私は同じ問題を抱えていた、その溶液の代わりに非表示のiframeのアヤックスを使用することでした。
:だからではなく、どこかのページではインラインフレームを生成します$("#chat .msg_list").prepend('<iframe id="hidden" src="chatFrame?id=$userId" frameborder="0" height="0" width="100%"></iframe>');
私はいくつかのdivにiframeの内容をロードするためにjqueryのAJAX呼び出しを使用します:
$('#chat #chat_comet').load('chatFrame?id=$userId');