diff --git a/public/app.js b/public/app.js index 5dca169..26e31c0 100644 --- a/public/app.js +++ b/public/app.js @@ -232,9 +232,13 @@ async function requestWakeLock() { /* ---------- service worker ---------- */ +let swRegistration = null; + function registerServiceWorker() { if (!('serviceWorker' in navigator)) return; - navigator.serviceWorker.register('./sw.js').catch((err) => console.warn('weerscherm: service worker', err)); + navigator.serviceWorker.register('./sw.js') + .then((reg) => { swRegistration = reg; }) + .catch((err) => console.warn('weerscherm: service worker', err)); let reloading = false; navigator.serviceWorker.addEventListener('controllerchange', () => { if (reloading) return; @@ -243,6 +247,16 @@ function registerServiceWorker() { }); } +/** + * Vraagt de browser expliciet een nieuwe sw.js te controleren. Op een kiosk-scherm dat nooit navigeert + * (geen tabwissel, geen echte reload) gebeurt dat anders alleen impliciet en onvoorspelbaar laat — soms + * pas bij de volgende dagelijkse 04:00-reload. Met skipWaiting + clients.claim in sw.js activeert een + * gevonden update zich meteen, en de controllerchange-listener hierboven herlaadt de pagina dan vanzelf. + */ +function checkForUpdate() { + swRegistration?.update().catch(() => {}); +} + /* ---------- start ---------- */ window.addEventListener('resize', fit); @@ -252,7 +266,7 @@ document.addEventListener('visibilitychange', () => { fit(); refresh(); requestWakeLock(); -registerServiceWorker(); + checkForUpdate(); } }); @@ -260,6 +274,7 @@ fit(); render(); refresh(); setInterval(refresh, REFRESH_MS); +setInterval(checkForUpdate, REFRESH_MS); scheduleClock(); scheduleMidnight(); scheduleReload(); diff --git a/public/sw.js b/public/sw.js index 51328f5..5627d46 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,6 +1,6 @@ /* Service worker: app-shell cache-first, API network-first met timeout en fallback op de laatste response. */ -const VERSION = 'weerscherm-v2'; +const VERSION = 'weerscherm-v3'; const SHELL = [ './', './index.html',