JavaScript 逆引き集 | Navigator.online でオンライン判定

JavaScript JavaScript
スポンサーリンク

オンライン判定 — navigator.onLine

ブラウザには「今ネットに接続できているかどうか」を判定するためのプロパティがあります。それが navigator.onLine です。
true なら「オンライン」、false なら「オフライン」と判定されます。


基本のコード例

<script>
  if (navigator.onLine) {
    console.log("オンラインです");
  } else {
    console.log("オフラインです");
  }
</script>
HTML
  • 戻り値: 真偽値(true / false
  • 注意: 「オンライン=インターネットに必ずつながる」ではなく、「ブラウザがネットワークに接続可能と認識している」状態。

状態変化を検知する(イベント)

<script>
  window.addEventListener("online", () => {
    console.log("ネット接続が復帰しました");
  });

  window.addEventListener("offline", () => {
    console.log("ネット接続が切れました");
  });
</script>
HTML
  • online イベント: ネットワークが復帰したときに発火。
  • offline イベント: ネットワークが切れたときに発火。

よく使うテンプレート集

UIに接続状態を表示

<div id="status"></div>
<script>
  const status = document.getElementById("status");

  function updateStatus() {
    status.textContent = navigator.onLine ? "オンライン" : "オフライン";
  }

  window.addEventListener("online", updateStatus);
  window.addEventListener("offline", updateStatus);

  updateStatus(); // 初期表示
</script>
JavaScript

オフライン時に保存して、オンライン時に送信

let queue = [];

function sendData(data) {
  if (navigator.onLine) {
    // サーバーへ送信
    fetch("/api", { method: "POST", body: JSON.stringify(data) });
  } else {
    // オフラインなら一時保存
    queue.push(data);
  }
}

window.addEventListener("online", () => {
  // 復帰したらまとめて送信
  queue.forEach(d => fetch("/api", { method: "POST", body: JSON.stringify(d) }));
  queue = [];
});
JavaScript

例題: 簡易オフライン通知バー

<div id="banner" style="background:red;color:white;display:none;">
  オフラインです。ネット接続を確認してください。
</div>

<script>
  const banner = document.getElementById("banner");

  function updateBanner() {
    banner.style.display = navigator.onLine ? "none" : "block";
  }

  window.addEventListener("online", updateBanner);
  window.addEventListener("offline", updateBanner);

  updateBanner(); // 初期状態を反映
</script>
JavaScript
  • 効果: ネットが切れると赤いバーが表示され、復帰すると消える。

実務でのコツ

  • 判定は簡易的:navigator.onLine は「ネットワーク接続があるかどうか」程度。実際にインターネットに到達できるかは保証しない。
    • 例: Wi-Fiにつながっていても、外部サイトにアクセスできない場合は true のまま。
  • 確実に確認したい場合: 実際に fetch でサーバーにアクセスしてみる。
  • イベントを活用: online / offline イベントでUIを更新するとユーザーに優しい。
  • オフライン対応: PWA(プログレッシブウェブアプリ)では Service Worker と組み合わせて「オフラインでも動く」仕組みを作る。

ありがちなハマりポイントと対策

  • 「オンラインなのに通信できない」:
    • 原因: DNSやサーバー障害。
    • 対策: 実際に fetch で確認する。
  • イベントが発火しない:
    • 原因: ネットワーク切断がブラウザに認識されない場合。
    • 対策: 定期的にサーバーへアクセスして確認する。

練習問題(接続状態をリアルタイム表示)

<p>現在の状態: <span id="state"></span></p>

<script>
  const state = document.getElementById("state");

  function update() {
    state.textContent = navigator.onLine ? "オンライン" : "オフライン";
  }

  window.addEventListener("online", update);
  window.addEventListener("offline", update);

  update(); // 初期表示
</script>
HTML
  • 効果: ページ上に「オンライン/オフライン」が常に表示される。

直感的な指針

  • navigator.onLine = ネットワーク接続の有無をざっくり判定。
  • イベント online / offline で変化を検知。
  • 本当に通信できるかは fetch で確認する。
  • UIに反映してユーザーに安心感を与えるのが基本的な使い方。
タイトルとURLをコピーしました