From d9256e6294bcb20e4cf5f034a2b0346c7e0de5f4 Mon Sep 17 00:00:00 2001 From: Honey Date: Sat, 25 Apr 2026 18:10:08 +0200 Subject: [PATCH] fix: auto-reload all PWA windows when new SW activates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Chain activate: clear old caches → claim clients → navigate all windows. client.navigate(url) forces a full reload so users always get the new version without manually closing/reopening the PWA. Also removed sw.js from PRECACHE (browser fetches SW directly, no need to cache it). Co-Authored-By: Claude Sonnet 4.6 --- sw.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sw.js b/sw.js index 7f1aeed..52b91d0 100644 --- a/sw.js +++ b/sw.js @@ -1,5 +1,5 @@ -const CACHE = 'ns-v22'; -const PRECACHE = ['/', 'index.html', 'styles.css', 'app.js', 'sw.js', 'manifest.json', 'icon.svg']; +const CACHE = 'ns-v23'; +const PRECACHE = ['/', 'index.html', 'styles.css', 'app.js', 'manifest.json', 'icon.svg']; const SKIP_URLS = ['/rest/stream', '/rest/download', '/config.js']; self.addEventListener('install', e => { @@ -9,11 +9,12 @@ self.addEventListener('install', e => { self.addEventListener('activate', e => { e.waitUntil( - caches.keys().then(keys => - Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k))) - ) + caches.keys() + .then(keys => Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k)))) + .then(() => self.clients.claim()) + .then(() => self.clients.matchAll({type: 'window', includeUncontrolled: true})) + .then(clients => clients.forEach(c => c.navigate(c.url))) ); - self.clients.claim(); }); self.addEventListener('fetch', e => {