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:
+17
-2
@@ -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
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user