Agent2 / sw.js
Nerdur's picture
Upload 2 files
3853382 verified
Raw History Blame Contribute Delete
1.62 kB
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')))
);
});