From b366d22575db67baade8ba5fa6a94c9dcbdc7a33 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 11 Feb 2022 15:13:15 +0100 Subject: [PATCH] Service Worker: Auto-recover after hard reload (#1707) --- src/util/getReadableErrorText.ts | 3 ++- src/util/setupServiceWorker.ts | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/util/getReadableErrorText.ts b/src/util/getReadableErrorText.ts index c248fbba4..85c3d11f9 100644 --- a/src/util/getReadableErrorText.ts +++ b/src/util/getReadableErrorText.ts @@ -43,7 +43,8 @@ const READABLE_ERROR_MESSAGES: Record = { MESSAGE_TOO_LONG: 'Message is too long', // Non-API errors - SERVICE_WORKER_DISABLED: 'Service Worker is disabled. Please reload the page without holding key.', + // eslint-disable-next-line max-len + SERVICE_WORKER_DISABLED: 'Service Worker is disabled. Streaming media may not be supported. Try reloading the page without holding key', // eslint-disable-next-line max-len MESSAGE_TOO_LONG_PLEASE_REMOVE_CHARACTERS: 'The provided message is too long. Please remove {EXTRA_CHARS_COUNT} character{PLURAL_S}.', // eslint-disable-next-line max-len diff --git a/src/util/setupServiceWorker.ts b/src/util/setupServiceWorker.ts index e2f252daa..85789328c 100644 --- a/src/util/setupServiceWorker.ts +++ b/src/util/setupServiceWorker.ts @@ -38,6 +38,17 @@ function subscribeToWorker() { if (IS_SERVICE_WORKER_SUPPORTED) { window.addEventListener('load', async () => { try { + if (!navigator.serviceWorker.controller) { + const registrations = await navigator.serviceWorker.getRegistrations(); + if (registrations.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 navigator.serviceWorker.register(new URL('../serviceWorker.ts', import.meta.url)); if (DEBUG) {