var staticCacheName = "pwa-v2"; var filesToCache = [ '/public/img/pwa/icon-192x192.png', '/public/img/pwa/icon-512x512.png' ]; // Cache on install self.addEventListener("install", event => { event.waitUntil( caches.open(staticCacheName) .then(cache => { return cache.addAll(filesToCache); }) .then(() => self.skipWaiting()) ) }); // Clear cache on activate self.addEventListener('activate', event => { event.waitUntil( caches.keys().then(cacheNames => { return Promise.all( cacheNames .filter(cacheName => (cacheName.startsWith("pwa-"))) .filter(cacheName => (cacheName !== staticCacheName)) .map(cacheName => caches.delete(cacheName)) ); }).then(() => self.clients.claim()) ); }); // Navigation must prefer the network so cached redirects cannot mask auth state. self.addEventListener("fetch", event => { if (event.request.method !== 'GET') { return; } if (event.request.mode === 'navigate') { event.respondWith( fetch(event.request) .catch(() => caches.match(event.request)) ); return; } event.respondWith( caches.match(event.request) .then(response => { return response || fetch(event.request); }) ) });