fix: dedupe SW registration, proactively check for updates every 5min and on foreground

Op een kiosk-scherm dat nooit navigeert gebeurt de browser-eigen update-check
voor de service worker onvoorspelbaar laat (soms pas bij de dagelijkse
04:00-reload). Roep nu expliciet registration.update() aan bij het opstarten,
elke 5 minuten en bij elke visibilitychange naar zichtbaar. Ook een eerdere
niet-bedoelde dubbele registerServiceWorker()-aanroep bij visibilitychange
verwijderd (ontstaan door een brede Python str.replace zonder count-limiet).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-13 09:56:21 +02:00
co-authored by Claude Sonnet 5
parent ef37c69076
commit 281eb1406f
2 changed files with 18 additions and 3 deletions
+17 -2
View File
@@ -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();
+1 -1
View File
@@ -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',