diff --git a/src/util/setupServiceWorker.ts b/src/util/setupServiceWorker.ts index 76075b3e5..c7c790547 100644 --- a/src/util/setupServiceWorker.ts +++ b/src/util/setupServiceWorker.ts @@ -10,6 +10,8 @@ type WorkerAction = { payload: Record; }; +const IGNORE_WORKER_PATH = '/k/'; + function handleWorkerMessage(e: MessageEvent) { const action: WorkerAction = e.data; if (DEBUG_MORE) { @@ -21,9 +23,7 @@ function handleWorkerMessage(e: MessageEvent) { const payload = action.payload; switch (action.type) { case 'focusMessage': - if (dispatch.focusMessage) { - dispatch.focusMessage(payload as any); - } + dispatch.focusMessage?.(payload as any); break; case 'playNotificationSound': playNotifySoundDebounced(action.payload.id); @@ -47,14 +47,16 @@ function subscribeToWorker() { if (IS_SERVICE_WORKER_SUPPORTED) { window.addEventListener('load', async () => { try { - if (!navigator.serviceWorker.controller) { + const controller = navigator.serviceWorker.controller; + if (!controller || controller.scriptURL.includes(IGNORE_WORKER_PATH)) { const registrations = await navigator.serviceWorker.getRegistrations(); - if (registrations.length) { + const ourRegistrations = registrations.filter((r) => !r.scope.includes(IGNORE_WORKER_PATH)); + if (ourRegistrations.length) { if (DEBUG) { // eslint-disable-next-line no-console console.log('[SW] Hard reload detected, re-enabling Service Worker'); } - await Promise.all(registrations.map((r) => r.unregister())); + await Promise.all(ourRegistrations.map((r) => r.unregister())); } }