≪ Today I learned.
RSS購読
    公開日
    タグ
    JavaScript
    著者
    ダーシノ

    ブラウザからインターネット接続状態を取得する

    Navigator#onLineプロパティを使うことで、ブラウザからインターネット接続の状態を取得できる。

    if (navigator.onLine === true) {
      console.log('ONLINE')
    } else {
      console.log('OFFLINE')
    }

    また、online/offlineイベントをリスンすることで、インターネット接続の状態が変化したときに処理を実行できる。

    window.addEventListener('online', () => {
      console.log('ONLINE')
    })
    
    window.addEventListener('offline', () => {
      console.log('OFFLINE')
    })

    用途としては、エディターを持つサービス(ブログやSNSなど)で、オンラインならchangeイベントでPUTリクエストをし自動保存。オフラインならLocalStorageやIndexedDBなどに保存して、onlineイベントが発火されたときにPUTリクエストで保存するなどが考えられる。

    const editor = document.querySelector('#editor')
    
    // 入力内容が変更されたら保存
    editor.addEventListener('change', () => {
      if (navigator.onLine === true) {
        // オンラインならPUTリクエスト
        fetch('/api/posts', {
          method: 'PUT',
          body: editor.value
        })
      } else {
        // オフラインならLocalStorageに保存
        localStorage.setItem('draft', editor.value)
      }
    })
    
    window.addEventListener('online', () => {
      // オンラインになったらLocalStorageの内容をPUTリクエスト
      const draft = localStorage.getItem('draft')
      if (draft) {
        fetch('/api/posts', {
          method: 'PUT',
          body: draft
        })
        localStorage.removeItem('draft')
      }
    })