JavaScriptでNetwork Information APIを使ってオフライン状態を検知
JavaScript、AJAX、オフライン環境におけるインターネット接続状態検知
このチュートリアルでは、JavaScriptとAJAXを使用して、インターネット接続がオフラインかどうかを検出する方法を解説します。
事前準備
- JavaScriptの基本的な知識
- AJAXの基礎知識
方法
- window.navigator.onLine プロパティを使用する
ブラウザは window.navigator.onLine
プロパティを通じて、オンライン/オフライン状態を提供します。このプロパティは、オンラインの場合は true
、オフラインの場合は false
を返します。
if (window.navigator.onLine) {
// オンラインの場合の処理
} else {
// オフラインの場合の処理
}
- XMLHttpRequest オブジェクトを使用する
XMLHttpRequest
オブジェクトは、サーバーとの通信に使用できます。通信エラーが発生した場合、オフラインであると判断できます。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.google.com');
xhr.onload = function() {
// 通信成功
};
xhr.onerror = function() {
// 通信エラーが発生 (オフラインの可能性)
};
xhr.send();
- EventSource オブジェクトを使用する
EventSource
オブジェクトは、サーバーからのイベントをリアルタイムで受信するために使用できます。サーバーとの接続が切断された場合、オフラインであると判断できます。
const source = new EventSource('https://www.example.com/events');
source.onmessage = function(event) {
// イベント受信
};
source.onerror = function(event) {
// 接続エラーが発生 (オフラインの可能性)
};
source.open();
- オンライン/オフラインイベントを使用する
一部のブラウザでは、オンライン/オフライン状態変化を検知するためのイベントが提供されています。これらのイベントを利用することで、状態変化時の処理を記述できます。
window.addEventListener('online', function() {
// オンラインになった時の処理
});
window.addEventListener('offline', function() {
// オフラインになった時の処理
});
注意点
- 上記の方法はブラウザによって対応状況が異なる場合があります。
- オフライン状態を検知しても、完全にオフラインになっているとは限りません。ネットワーク接続が不安定な場合など、一時的に接続が切断されることもあります。
- オフライン状態を検知した後の処理は、アプリケーションの要件に合わせて記述する必要があります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>インターネット接続状態検知サンプル</title>
</head>
<body>
<p id="message"></p>
<script>
const messageElement = document.getElementById('message');
window.addEventListener('online', function() {
messageElement.textContent = 'オンラインになりました';
});
window.addEventListener('offline', function() {
messageElement.textContent = 'オフラインになりました';
});
</script>
</body>
</html>
上記コードの説明
window.addEventListener
イベントリスナーを使用して、online
とoffline
イベントを監視します。- イベント発生時に、メッセージ要素の内容をオンライン/オフライン状態に合わせて変更します。
インターネット接続状態を検知するその他の方法
サーバーとの通信を試み、成功/失敗を判定することで、インターネット接続状態を検知できます。
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://www.google.com');
xhr.onload = function() {
// 通信成功 (オンラインの可能性)
};
xhr.onerror = function() {
// 通信エラーが発生 (オフラインの可能性)
};
xhr.send();
const img = new Image();
img.onload = function() {
// 画像読み込み成功 (オンラインの可能性)
};
img.onerror = function() {
// 画像読み込みエラーが発生 (オフラインの可能性)
};
img.src = 'https://www.google.com/images/logo.png';
navigator.connection プロパティを使用する
一部のブラウザでは、navigator.connection
プロパティを通じて、ネットワーク接続に関する詳細情報を得ることができます。
if (navigator.connection && navigator.connection.type === 'none') {
// オフライン
} else {
// オンライン
}
Network Information API は、ネットワーク接続に関する詳細情報を取得するための API です。
const network = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
network.addEventListener('change', function() {
// ネットワーク接続状態変化
});
if (network.type === 'none') {
// オフライン
} else {
// オンライン
}
- サーバーとの通信を試みる場合、通信エラーが発生してもオフラインとは限りません。サーバー側で問題が発生している可能性もあります。
- 画像の読み込みを試みる場合、画像ファイルのサイズやネットワーク速度によって、読み込みに時間がかかる場合があります。
navigator.connection
プロパティや Network Information API は、すべてのブラウザでサポートされているわけではありません。
javascript ajax offline