ブラウザからインターネット接続状態を取得する
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')
}
})