diff --git a/apps/frontend/src/service-worker.js b/apps/frontend/src/service-worker.js index 3ea146a..7365e01 100644 --- a/apps/frontend/src/service-worker.js +++ b/apps/frontend/src/service-worker.js @@ -92,18 +92,25 @@ self.addEventListener('fetch', (event) => { return; } - // Images - Cache first, network fallback + // Images - Cache first, network fallback (only for same-origin) if (request.destination === 'image' || url.pathname.match(/\.(jpg|jpeg|png|gif|webp|svg)$/)) { + // Don't cache external images + if (url.origin !== self.location.origin) { + return; + } + event.respondWith( caches.match(request).then((cachedResponse) => { if (cachedResponse) { return cachedResponse; } return fetch(request).then((response) => { - const responseClone = response.clone(); - caches.open(IMAGE_CACHE).then((cache) => { - cache.put(request, responseClone); - }); + if (response.ok) { + const responseClone = response.clone(); + caches.open(IMAGE_CACHE).then((cache) => { + cache.put(request, responseClone); + }); + } return response; }); }) @@ -111,18 +118,25 @@ self.addEventListener('fetch', (event) => { return; } - // Static assets - Cache first, network fallback + // Static assets - Cache first, network fallback (only for same-origin) if (url.pathname.match(/\.(js|css|woff|woff2|ttf|eot)$/)) { + // Don't cache external scripts/styles (CDN resources, analytics, etc.) + if (url.origin !== self.location.origin) { + return; + } + event.respondWith( caches.match(request).then((cachedResponse) => { if (cachedResponse) { return cachedResponse; } return fetch(request).then((response) => { - const responseClone = response.clone(); - caches.open(STATIC_CACHE).then((cache) => { - cache.put(request, responseClone); - }); + if (response.ok) { + const responseClone = response.clone(); + caches.open(STATIC_CACHE).then((cache) => { + cache.put(request, responseClone); + }); + } return response; }); })