diff --git a/CHANGELOG.md b/CHANGELOG.md
index 73b87c63b4..454569217a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@ and this project adheres to
- ♿ add h1 for SR on 40X pages and remove alt texts #1438
- ♿ update labels and shared document icon accessibility #1442
- 🍱(frontend) Fonts GDPR compliants #1453
+- ♻️(service-worker) improve SW registration and update handling #1473
### Fixed
diff --git a/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx b/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx
index cb01219d8d..2e033be320 100644
--- a/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx
+++ b/src/frontend/apps/impress/src/features/service-worker/__tests__/useSWRegister.test.tsx
@@ -11,7 +11,6 @@ const TestComponent = () => {
describe('useSWRegister', () => {
it('checks service-worker is register', () => {
- process.env.NEXT_PUBLIC_BUILD_ID = '123456';
vi.spyOn(console, 'error').mockImplementation(() => {});
const registerSpy = vi.fn();
@@ -35,7 +34,7 @@ describe('useSWRegister', () => {
render();
- expect(registerSpy).toHaveBeenCalledWith('/service-worker.js?v=123456');
+ expect(registerSpy).toHaveBeenCalledWith('/service-worker.js');
expect(addEventListenerSpy).toHaveBeenCalledWith(
'controllerchange',
expect.any(Function),
@@ -44,7 +43,6 @@ describe('useSWRegister', () => {
it('checks service-worker is not register', () => {
process.env.NEXT_PUBLIC_SW_DEACTIVATED = 'true';
- process.env.NEXT_PUBLIC_BUILD_ID = '123456';
const registerSpy = vi.fn();
registerSpy.mockImplementation(
@@ -62,6 +60,6 @@ describe('useSWRegister', () => {
render();
- expect(registerSpy).not.toHaveBeenCalledWith('/service-worker.js?v=123456');
+ expect(registerSpy).not.toHaveBeenCalledWith('/service-worker.js');
});
});
diff --git a/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx b/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx
index 5021862de1..998dab944c 100644
--- a/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx
+++ b/src/frontend/apps/impress/src/features/service-worker/hooks/useSWRegister.tsx
@@ -7,7 +7,7 @@ export const useSWRegister = () => {
process.env.NEXT_PUBLIC_SW_DEACTIVATED !== 'true'
) {
navigator.serviceWorker
- .register(`/service-worker.js?v=${process.env.NEXT_PUBLIC_BUILD_ID}`)
+ .register(`/service-worker.js`)
.then((registration) => {
registration.onupdatefound = () => {
const newWorker = registration.installing;
@@ -29,11 +29,13 @@ export const useSWRegister = () => {
console.error('Service worker registration failed:', err);
});
- const currentController = navigator.serviceWorker.controller;
+ let refreshing = false;
const onControllerChange = () => {
- if (currentController) {
- window.location.reload();
+ if (refreshing) {
+ return;
}
+ refreshing = true;
+ window.location.reload();
};
navigator.serviceWorker.addEventListener(
'controllerchange',