if ("serviceWorker" in navigator) { navigator.serviceWorker.register("/sw.js").then(() => { /* // Check if the browser supports background sync if ('serviceWorker' in navigator && 'SyncManager' in window) { navigator.serviceWorker.ready.then(function (registration) { return registration.sync.register('polling-sync'); }).catch(function (err) { console.error('Background Sync registration failed:', err); }); setInterval(() => { navigator.serviceWorker.ready.then(function (registration) { // Try fetching updates when online, register for sync otherwise if (navigator.onLine) { registration.sync.getTags().then(function (tags) { if (!tags.includes('polling-sync')) { registration.sync.register('polling-sync'); } }); } }); }, 60000); // Poll every 60 seconds } */ navigator.serviceWorker.addEventListener("message", async (event) => { if ('reload' === event.data) { if ((window as any).updateTriggerReload === false) return window.dispatchEvent(new Event('reload')) window.location.reload(); } else if ('cacheVersionUpdate' === event.data) { navigator.serviceWorker.getRegistrations().then(regi => { const registration = regi[0] if (!registration) return const finishedLoading = () => { if (document.readyState === 'complete') return navigator.serviceWorker.controller?.postMessage('finished-loading') document.addEventListener('DOMContentLoaded', () => { navigator.serviceWorker.controller?.postMessage('finished-loading') }) } let newWorker = registration.waiting || registration.installing || registration.active if (newWorker?.state !== 'activated') { newWorker?.postMessage('activate') newWorker?.addEventListener('statechange', (e: any) => { if (e.target?.state === 'activated') finishedLoading() }) } else { finishedLoading() } }) } else { const { type, data } = event.data switch (type) { case 'notification': { window.dispatchEvent(new CustomEvent('server-notification', { detail: data })) break } default: { console.error('Unknown message type: ', event.data) } } } }); }).catch(error => { console.error("Error registering the Service Worker: ", error); }); }