JavaScript でインターネット接続がオフラインかどうかを検出するにはどうすればよいですか?
ベストアンサー1
ほぼすべての主要ブラウザ今サポートするwindow.navigator.onLine
プロパティと、対応するonline
ウィンドウoffline
イベント。次のコード スニペットを実行してテストします。
console.log('Initially ' + (window.navigator.onLine ? 'on' : 'off') + 'line');
window.addEventListener('online', () => console.log('Became online'));
window.addEventListener('offline', () => console.log('Became offline'));
document.getElementById('statusCheck').addEventListener('click', () => console.log('window.navigator.onLine is ' + window.navigator.onLine));
<button id="statusCheck">Click to check the <tt>window.navigator.onLine</tt> property</button><br /><br />
Check the console below for results:
システムまたはブラウザをオフライン/オンライン モードに設定し、ログまたはwindow.navigator.onLine
プロパティで値の変更を確認してください。
しかし、この引用文に注目してくださいMozilla ドキュメント:
Chrome と Safari では、ブラウザがローカル エリア ネットワーク (LAN) またはルーターに接続できない場合はオフラインになります。その他の条件では が返されます
true
。したがって、ブラウザがfalse
値 を返した場合にはオフラインであると想定できますが、値が必ずしもブラウザがインターネットにアクセスできることを意味するとは想定できませんtrue
。常に「接続」された仮想イーサネット アダプタを持つ仮想化ソフトウェアをコンピュータが実行している場合など、誤検知が発生する可能性があります。したがって、ブラウザのオンライン状態を本当に判断したい場合は、確認するための追加の手段を開発する必要があります。Firefox と Internet Explorer では、ブラウザをオフライン モードに切り替えると
false
値が送信されます。Firefox 41 までは、他のすべての条件で値が返されます。Firefoxtrue
41 以降、OS X および Windows では、値は実際のネットワーク接続に従います。
(強調は私によるものです)
つまり、イベントwindow.navigator.onLine
が発生した場合false
(またはoffline
イベントが発生した場合)、インターネットに接続できないことが保証されます。
ただし、接続されている場合true
(またはonline
イベントが発生した場合)は、せいぜいシステムが何らかのネットワークに接続されていることを意味するだけです。たとえば、インターネットにアクセスできることを意味するわけではありません。これを確認するには、他の回答に記載されている解決策のいずれかを使用する必要があります。
当初はこれをアップデートとして投稿するつもりでしたグラント・ワグナーの回答、しかし、2014年のアップデートがすでに行われていたことを考えると、編集が多すぎるように思えた。彼からではない。