From 8ba328d96bfad6c150a7ef6d16f520b3f0666740 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 20 Nov 2023 13:45:52 -0600 Subject: [PATCH 1/2] Prevent a new ServiceWorker from being installed after the page loads --- src/main.tsx | 3 ++- src/utils/sw.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main.tsx b/src/main.tsx index 1ef21a493..05c38cf73 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -25,11 +25,12 @@ import './styles/tailwind.css'; import './precheck'; import ready from './ready'; -import { registerSW } from './utils/sw'; +import { registerSW, lockSW } from './utils/sw'; if (BuildConfig.NODE_ENV === 'production') { printConsoleWarning(); registerSW('/sw.js'); + lockSW(); } ready(() => { diff --git a/src/utils/sw.ts b/src/utils/sw.ts index 931c5b60c..692b1ab0f 100644 --- a/src/utils/sw.ts +++ b/src/utils/sw.ts @@ -7,6 +7,15 @@ function registerSW(path: string) { } } +/** Prevent a new ServiceWorker from being installed. */ +function lockSW() { + if ('serviceWorker' in navigator) { + navigator.serviceWorker.register = () => { + throw new Error('ServiceWorker already registered.'); + }; + } +} + /** Unregister the ServiceWorker */ // https://stackoverflow.com/a/49771828/8811886 const unregisterSW = async(): Promise => { @@ -22,4 +31,5 @@ const unregisterSW = async(): Promise => { export { registerSW, unregisterSW, + lockSW, }; \ No newline at end of file From df020e425399fd7223d7ff4b7514ca1bdcb741c8 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Mon, 20 Nov 2023 14:22:48 -0600 Subject: [PATCH 2/2] ServiceWorker: don't wait for window.onload before registering the worker --- src/utils/sw.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/utils/sw.ts b/src/utils/sw.ts index 692b1ab0f..b5e49c860 100644 --- a/src/utils/sw.ts +++ b/src/utils/sw.ts @@ -1,9 +1,7 @@ /** Register the ServiceWorker. */ function registerSW(path: string) { if ('serviceWorker' in navigator) { - window.addEventListener('load', () => { - navigator.serviceWorker.register(path, { scope: '/' }); - }); + navigator.serviceWorker.register(path, { scope: '/' }); } }