33

CometまたはAjaxLongPullテクニックを使用する場合、通常はiframeが使用されます。そして、そのiframeが長い接続が閉じるのを待っている間、ブラウザーはそのスロバー(進行状況/読み込みインジケーター)を回転させています。

いくつかのウェブサイト、例えばetherpad.comは、なんとかそれを止めさせました。

どうやってやっているの?

4

4 に答える 4

17

インターネットの根性を昼夜掘り下げた後、私が思いついたのは次のとおりです。

  1. サーバー送信イベント-非常にクールで、現在Operaでのみ機能しますが、HTML5の一部である可能性があり、他のブラウザーがいつかそれをサポートする可能性があります。「application/x-dom-event-stream」のコンテンツタイプを持つ新しい要素タグを追加します。これにより、サーバーはクライアントDOMでイベントを発生させることができます。そして、私が理解している限り、進行状況インジケーターを表示するべきではありません。これは標準の草案でもあり、iframe彗星全体のようなハックではありません。

  2. XMLHttpRequest-FirefoxとSafariでは、IEでは使用できません。これは、各readyStateChangeイベントに表示されるフラグメントを処理できるロングプルページの読み込みに使用できます。進行状況インジケーター*は表示されません。-以下のコメントを参照してください

  3. ActiveXObject( "htmlfile")-IEで使用して、現在のウィンドウスコープ外のページ/ウィンドウを作成できます。これにより、進行状況インジケーターが消えます!ロードされたiframeは非表示のブラウザになります。

server-sent-eventsの詳細:

そして、他の2つのテクニックについての詳細(問題をよりよく説明します):* http://meteorserver.org/browser-techniques/

各テクニックについてさらに深く、そしてより多くのテクニック:

于 2009-07-01T00:08:32.513 に答える
3

私の場合、ajaxリクエストでsetTimeoutを実行すると、すべてが解決しました。document.readyからリクエストを実行すると、「運命のドキドキ」が発生しました。しかし、setTimeoutではそれは起こりません。(この修正はChromeでも機能します)。

于 2011-08-25T23:07:47.677 に答える
1

いくつかの例が必要になる場合に備えて、この男はFirefoxの問題を解決するための解決策を提供しました。 http://www.shanison.com/?p=237

于 2010-05-10T15:24:38.497 に答える
0

私も同じ問題を抱えていました。解決策は、非表示の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');
于 2012-08-18T11:13:33.303 に答える