-
-
Save plandem/a784e2af489c3260797de64c8dd9a700 to your computer and use it in GitHub Desktop.
A modern-ish SW registration script, detecting various state changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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