4


1

(モバイル)Safari / Chromeは、Cometを使用して読み込まれたページをいつ考慮しますか?

長いポーリングの彗星接続を使用するWebサイトがあります。 ページのロード時/後に接続をセットアップする必要があります。

それを防ぐための私の努力にもかかわらず、多くのブラウザは長いポーリング要求をページ読み込みメカニズムの一部と見なし、ページを「読み込み」フェーズに保ちます。 Safariでは、これにより進行状況バー(urlフィールドの後ろ)が完了しなくなります。 Chromeでは、ファビコンは回転する読み込みアイコンとして表示されます。 さらに問題なのは、iPhoneのモバイルサファリです。これにより、「読み込み中」にurlフィールドを非表示にすることはできません。 モバイルAndroidには、一部のデバイスで同様の問題があります。

全体として、動作を再現するのは難しく、ブラウザ/プラットフォーム/接続速度などに依存しているようです。 今、私のコードはwindow.onLoadトリガーの10ミリ秒後の長いポーリングを開始します。 これは頻繁にうまくいくようですが、常にそうではありません。 何らかの外部(イメージ/ javascript)リソースのロードと関係があるのではないかと思われますが、onLoadイベントは、これらが完全にロードされた後に発生します。

これらのブラウザに私のページがロードされていると見なすようにする方法についてのポインタはありますか? 理想的には、何らかの方法でxmlhttprequestを彗星のようにマークできますが、これは機能ではありません:)。

2 Answer


4


私は同じ問題を抱えていて、長いポーリングajaxリクエストを発行する前にページの_onloadハンドラーの終了を許可すると、すべてが正常に機能し、ページが読み込み状態に戻りません。

したがって、たとえば、通常は

$(document).ready(function(){$ .ajax(…​);});

になる

$(document).ready(function()setTimeout(function(){$ .ajax(…​);}、0);});

WebKitの特定のケースでは、$(document).readyはwindow.onloadの同義語であると考えています。 それが重要な理由です。

これは、iOS 5を搭載したiPad1,1で機能しました。


0


Safari 5.1.5のajaxロングポーリングリクエストで「ローディング」インジケータを削除することに成功しました。 残念ながら、Chromeはまだロードインジケーターを常に表示しています。 クロームの場合、私たちのチームは、body要素全体(例:十字線またはカスタムカーソル)でcssカーソル値を変更することを選択しました-ひどい「ハック」-しかし、少なくともユーザーは読み込み中のマウスカーソルを表示しませんシステム上にあります。