diff --git a/countdown.html b/countdown.html
index caaf132..6b9112f 100644
--- a/countdown.html
+++ b/countdown.html
@@ -398,12 +398,26 @@
}
});
- // PWA SW
+ // PWA Service Worker — Network-First Strategie (Updates kommen sofort durch)
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('./sw.js')
- .then(function(r){ console.log('[PWA] SW registered:', r.scope); })
- .catch(function(e){ console.warn('[PWA] SW failed:', e); });
+ .then(function(reg) {
+ console.log('[PWA] SW registered:', reg.scope);
+ reg.addEventListener('updatefound', function() {
+ var newSw = reg.installing;
+ if (!newSw) return;
+ newSw.addEventListener('statechange', function() {
+ if (newSw.state === 'activated' && navigator.serviceWorker.controller) {
+ console.log('[PWA] Neue Version aktiviert');
+ if (window.confirm('🔄 Neue Version der JGA-Seite verfügbar — jetzt neu laden?')) {
+ window.location.reload();
+ }
+ }
+ });
+ });
+ })
+ .catch(function(err) { console.warn('[PWA] SW failed:', err); });
});
}
diff --git a/index.html b/index.html
index 376c753..d62cf68 100644
--- a/index.html
+++ b/index.html
@@ -886,10 +886,26 @@
});
});
- /* ===== PWA Service Worker ===== */
+ // PWA Service Worker — Network-First Strategie (Updates kommen sofort durch)
if ('serviceWorker' in navigator) {
window.addEventListener('load', () => {
- navigator.serviceWorker.register('./sw.js').catch(() => {});
+ navigator.serviceWorker.register('./sw.js')
+ .then(reg => {
+ console.log('[PWA] SW registered:', reg.scope);
+ reg.addEventListener('updatefound', () => {
+ const newSw = reg.installing;
+ if (!newSw) return;
+ newSw.addEventListener('statechange', () => {
+ if (newSw.state === 'activated' && navigator.serviceWorker.controller) {
+ console.log('[PWA] Neue Version aktiviert');
+ if (window.confirm('🔄 Neue Version der JGA-Seite verfügbar — jetzt neu laden?')) {
+ window.location.reload();
+ }
+ }
+ });
+ });
+ })
+ .catch(err => console.warn('[PWA] SW registration failed:', err));
});
}
diff --git a/memory.html b/memory.html
index 0d261b7..296e8f4 100644
--- a/memory.html
+++ b/memory.html
@@ -1219,9 +1219,30 @@ if (!state.setupDone) {
}
checkStorage();
-if ('serviceWorker' in navigator) {
- navigator.serviceWorker.register('sw.js').catch(() => {});
-}
+ // PWA Service Worker — Network-First Strategie (Updates kommen sofort durch)
+ if ('serviceWorker' in navigator) {
+ window.addEventListener('load', () => {
+ navigator.serviceWorker.register('./sw.js')
+ .then(reg => {
+ console.log('[PWA] SW registered:', reg.scope);
+ // Update-Hook: wenn ein neuer SW installiert wurde, kurz reloaden
+ reg.addEventListener('updatefound', () => {
+ const newSw = reg.installing;
+ if (!newSw) return;
+ newSw.addEventListener('statechange', () => {
+ if (newSw.state === 'activated' && navigator.serviceWorker.controller) {
+ console.log('[PWA] Neue Version aktiviert — lade neu');
+ // Sanfter Reload ohne Datenverlust, Cache-Bust mit Timestamp
+ if (window.confirm('🔄 Neue Version der JGA-Seite verfügbar — jetzt neu laden?')) {
+ window.location.reload();
+ }
+ }
+ });
+ });
+ })
+ .catch(err => console.warn('[PWA] SW registration failed:', err));
+ });
+ }