diff --git a/frontend/public/sw.js b/frontend/public/sw.js index 1e36828..e91eadf 100644 --- a/frontend/public/sw.js +++ b/frontend/public/sw.js @@ -1,49 +1,9 @@ -const CACHE = 'dickendock-v1'; +// Passiver Service Worker – nur für PWA-Installierbarkeit, kein Caching +// Verhindert schwarze Seiten nach Rebuilds self.addEventListener('install', () => self.skipWaiting()); - -self.addEventListener('activate', e => { - e.waitUntil( - caches.keys() - .then(keys => Promise.all(keys.filter(k => k !== CACHE).map(k => caches.delete(k)))) - .then(() => self.clients.claim()) - ); -}); - -self.addEventListener('fetch', e => { - const url = e.request.url; - - // Externe URLs (Favicons, Fonts, etc.) immer direkt – kein SW-Intercept - if (!url.startsWith(self.location.origin)) return; - - // API immer live - if (url.includes('/api/')) { - e.respondWith(fetch(e.request).catch(() => new Response('Offline', { status: 503 }))); - return; - } - - // HTML + JS/CSS-Assets: network-first → kein veralteter Cache nach Rebuild - const isDoc = e.request.mode === 'navigate' || url.endsWith('.js') || url.endsWith('.css'); - if (isDoc) { - e.respondWith( - fetch(e.request) - .then(res => { - if (res.ok) caches.open(CACHE).then(c => c.put(e.request, res.clone())); - return res; - }) - .catch(() => caches.match(e.request)) - ); - return; - } - - // Alles andere (eigene Bilder, Manifests): cache-first - e.respondWith( - caches.match(e.request).then(cached => { - if (cached) return cached; - return fetch(e.request).then(res => { - if (res.ok) caches.open(CACHE).then(c => c.put(e.request, res.clone())); - return res; - }); - }) - ); -}); +self.addEventListener('activate', e => e.waitUntil( + caches.keys().then(keys => Promise.all(keys.map(k => caches.delete(k)))) + .then(() => self.clients.claim()) +)); +// Alle Requests direkt ans Netzwerk – kein Intercept