I have a service worker that is supposed to cache an offline.html
page that is displayed if the client has no network connection. However, it sometimes believes
navigator.onLine
and the related events can be useful when you want to update your UI to indicate that you're offline and, for instance, only show content that exists in a cache.
But I'd avoid writing service worker logic that relies on checking navigator.onLine
. Instead, attempt to make a fetch()
unconditionally, and if it fails, provide a backup response. This will ensure that your web app behaves as expected regardless of whether the fetch()
fails due to being offline, due to lie-fi, or due to your web server experiencing issues.
// Other fetch handler code...
if (event.request.mode === 'navigate') {
return event.respondWith(
fetch(event.request).catch(() => caches.match(OFFLINE_URL))
);
}
// Other fetch handler code...