const CACHE_NAME = 'agentscope-v2'; const urlsToCache = ['/', './index.html']; self.addEventListener('install', event => { event.waitUntil( caches.open(CACHE_NAME) .then(cache => cache.addAll(urlsToCache)) ); self.skipWaiting(); }); self.addEventListener('activate', event => { event.waitUntil( caches.keys().then(keys => Promise.all(keys.filter(key => key !== CACHE_NAME).map(key => caches.delete(key))) ).then(() => self.clients.claim()) ); }); // Network-first (sa cache fallback-om) za sve GET zahtjeve. // Zašto: sa "cache-first" strategijom (stara verzija), jednom keširan // index.html bi ostao zauvijek serviran iz cache-a dok se ručno ne // promijeni CACHE_NAME ili korisnik ne obriše podatke sajta u browseru - // novi upload index.html fajla se ne bi vidio bez toga. Network-first // rješava to prirodno: svaki put kad je uređaj online, traži se svježa // verzija sa servera; ako fetch uspije, odgovor se i kešira (za offline // slučaj); ako fetch ne uspije (offline), vraća se posljednja keširana // verzija. self.addEventListener('fetch', event => { if (event.request.method !== 'GET') return; event.respondWith( fetch(event.request) .then(networkResponse => { const responseClone = networkResponse.clone(); caches.open(CACHE_NAME).then(cache => cache.put(event.request, responseClone)); return networkResponse; }) .catch(() => caches.match(event.request).then(cached => cached || caches.match('./index.html'))) ); });