PWA: index.html immer no-store, Reload beim naechsten Seitenwechsel nach Update
This commit is contained in:
@@ -3,6 +3,7 @@ import ReactDOM from 'react-dom/client'
|
||||
import App from './App.jsx'
|
||||
|
||||
// ── Auto-Reload bei neuem Build ───────────────────────────────────────────────
|
||||
// Reload passiert beim nächsten Seitenwechsel (setActive) — nicht mitten in Eingaben
|
||||
const STORED_KEY = 'dd_build_time';
|
||||
let newBuildAvailable = false;
|
||||
|
||||
@@ -20,11 +21,12 @@ async function checkBuildTime() {
|
||||
} catch {}
|
||||
}
|
||||
|
||||
// Alle 60s im Hintergrund prüfen
|
||||
// Beim Start sofort prüfen (PWA-Launch: index.html könnte gecacht sein)
|
||||
checkBuildTime();
|
||||
// Danach alle 60s im Hintergrund weiter prüfen
|
||||
setInterval(checkBuildTime, 60_000);
|
||||
|
||||
// Reload-Funktion – wird vom App beim Seitenwechsel aufgerufen
|
||||
// Wird von App.jsx bei jedem Seitenwechsel aufgerufen
|
||||
export function reloadIfNewBuild() {
|
||||
if (newBuildAvailable) window.location.reload();
|
||||
}
|
||||
@@ -32,7 +34,7 @@ export function reloadIfNewBuild() {
|
||||
// ── Service Worker ────────────────────────────────────────────────────────────
|
||||
if ('serviceWorker' in navigator) {
|
||||
navigator.serviceWorker.register('/sw.js').then(reg => {
|
||||
// Falls schon ein wartender SW da ist → sofort aktivieren
|
||||
// Falls schon ein wartender SW vorhanden → sofort aktivieren
|
||||
if (reg.waiting) {
|
||||
reg.waiting.postMessage('SKIP_WAITING');
|
||||
}
|
||||
@@ -41,16 +43,16 @@ if ('serviceWorker' in navigator) {
|
||||
const nw = reg.installing;
|
||||
nw?.addEventListener('statechange', () => {
|
||||
if (nw.state === 'installed') {
|
||||
// Neuer SW installiert → sofort aktivieren
|
||||
// Neuer SW fertig installiert → sofort aktivieren
|
||||
nw.postMessage('SKIP_WAITING');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Wenn SW-Controller gewechselt hat → sofort neu laden
|
||||
// (nicht erst beim nächsten Seitenwechsel warten)
|
||||
// Wenn der SW-Controller gewechselt hat (neuer SW aktiv):
|
||||
// newBuildAvailable setzen — Reload passiert beim nächsten setActive
|
||||
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
||||
window.location.reload();
|
||||
newBuildAvailable = true;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user