Skip to content

Instantly share code, notes, and snippets.

@plandem
Forked from jeffposnick/register-sw.js
Created August 3, 2020 14:10
Show Gist options
  • Save plandem/a784e2af489c3260797de64c8dd9a700 to your computer and use it in GitHub Desktop.
Save plandem/a784e2af489c3260797de64c8dd9a700 to your computer and use it in GitHub Desktop.
A modern-ish SW registration script, detecting various state changes.
if ('serviceWorker' in navigator) {
window.addEventListener('load', async function() {
const registration = await navigator.serviceWorker.register('/service-worker.js');
if (registration.waiting && registration.active) {
// The page has been loaded when there's already a waiting and active SW.
// This would happen if skipWaiting isn't being called, and there are
// still old tabs open.
console.log('Please close all tabs to get updates.');
} else {
// updatefound is also fired for the very first install. ¯\_(ツ)_/¯
registration.addEventListener('updatefound', () => {
registration.installing.addEventListener('statechange', (event) => {
if (event.target.state === 'installed') {
if (registration.active) {
// If there's already an active SW, and skipWaiting() is not
// called in the SW, then the user needs to close all their
// tabs before they'll get updates.
console.log('Please close all tabs to get updates.');
} else {
// Otherwise, this newly installed SW will soon become the
// active SW. Rather than explicitly wait for that to happen,
// just show the initial "content is cached" message.
console.log('Content is cached for the first time!');
}
}
});
});
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment