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!'); } } }); }); } }); }