1. ホーム
  2. javascript

[解決済み] クロスブラウザでオンライン/オフラインのイベントを検出するには?

2022-09-22 15:13:40

質問

HTML5のonlineとofflineのイベントを使って、ブラウザがオフラインになったことを正確に検出しようとしています。

以下は私のコードです。

<script>
    // FIREFOX
    $(window).bind("online", applicationBackOnline); 
    $(window).bind("offline", applicationOffline);

    //IE
    window.onload = function() {
        document.body.ononline = IeConnectionEvent;
        document.body.onoffline = IeConnectionEvent;
    } 
</script>

Firefox でも IE でも "Work offline" を押すだけでは問題なく動作するのですが、実際に線を抜くとなんだかランダムに動作するようになってしまいました。

この変更を検出する最良の方法は何でしょうか。私は、タイムアウトによる ajax 呼び出しの繰り返しを避けたいと思います。

どのように解決するのですか?

2011 年の現在、さまざまなブラウザ ベンダーが、オフラインをどのように定義するかについて合意できていません。一部のブラウザーは、ネットワーク アクセスの欠如とは別のものと考え、ワーク オフライン機能を備えていますが、これもインターネット アクセスとは別のものです。全体が混乱しているのです。一部のブラウザ ベンダーは、実際のネットワーク アクセスが失われたときに navigator.onLine フラグを更新しますが、更新しないベンダーもあります。

仕様書から

ユーザエージェントが 確実にオフライン(ネットワークから切り離されている を返します。) ユーザエージェントがオンラインである可能性がある場合、trueを返します。 がオンラインである可能性がある場合は

オンラインとオフラインのイベントは この属性の値が変化したときに発生します。 が変更されたときに発生します。

navigator.onLine属性は は、ユーザーエージェントが ネットワークに接続しない場合 リンクをたどるとき、またはスクリプトが がリモートページを要求したとき (またはそのような試みが失敗することを知っているとき) そのような試みは失敗すると知っている)、そして、そうでなければ それ以外の場合は真を返さなければなりません。

最後に、仕様書の注釈です。

この属性は本質的に 信頼性がありません。コンピュータは ネットワークに接続することができます。 インターネットに接続することができます。