// https://googlechrome.github.io/samples/service-worker/basic/ const PRECACHE = "appname-precache-v1"; const RUNTIME = "appname-runtime"; const PRECACHE_URLS = [ "./", // Alias for index.html "index.html", "style.css", "main.js" ]; self.addEventListener("install", e => e.waitUntil( caches.open(PRECACHE) .then(cache => cache.addAll(PRECACHE_URLS)) .then(self.skipWaiting()))); self.addEventListener("activate", e => { const currentCaches = [PRECACHE, RUNTIME]; e.waitUntil( // Clean up old caches caches.keys().then(cacheNames => cacheNames.filter(cacheName => !currentCaches.includes(cacheName)) ).then(cachesToDelete => Promise.all(cachesToDelete.map(cacheToDelete => caches.delete(cacheToDelete))) ).then(() => self.clients.claim()) ); }); self.addEventListener("fetch", e => { if (e.request.url.startsWith(self.location.origin)) { e.respondWith(caches.match(e.request).then(cachedResponse => cachedResponse? cachedResponse : caches.open(RUNTIME).then(cache => fetch(e.request).then(res => cache.put(e.request, res.clone()).then(() => res) ) ) )); } });