icons-member-service-worker.js (1810B)
1 // Some user agents only offer app installation if there is a SW and it handles 2 // offline requests. 3 4 const cacheVersion = "1.2"; 5 const CACHE_NAME = `cache-v${cacheVersion}`; 6 7 // The resources cached by this service worker. 8 const resources = [ 9 "icons-member-cors-fail-manual.sub.html", 10 "icons-member-cors-manual.sub.html", 11 "icons-member-csp-fail-manual.sub.html", 12 "icons-member-csp-manual.sub.html", 13 "icons-member-last-matching-manual.html", 14 "icons-member-manual.html", 15 "icons-member-next-appropriate-manual.html", 16 "icons-member-service-worker.js", 17 "resources/icons-member-manual.js", 18 "resources/fail.png", 19 "resources/pass.png" 20 ]; 21 22 // Load all resources for this service worker. 23 const precache = async () => { 24 const cache = await caches.open(CACHE_NAME); 25 await cache.addAll(resources); 26 }; 27 28 // Get a resource from the cache. 29 const fromCache = async request => { 30 const cache = await caches.open(CACHE_NAME); 31 return await cache.match(request.url); 32 }; 33 34 // Attempt to get resources from the network first, fallback to the cache if we're 35 // offline. 36 const networkFallbackToCache = async request => { 37 try { 38 const response = await fetch(request); 39 if (response.ok) return response; 40 } catch (err) {} 41 return await fromCache(request); 42 }; 43 44 // When we have a new service worker, update the caches and swap immediately. 45 self.addEventListener("install", e => { 46 e.waitUntil(precache().then(() => self.skipWaiting())); 47 }); 48 49 // Claim existing clients. 50 self.addEventListener("activate", e => { 51 e.waitUntil(self.clients.claim()); 52 }); 53 54 // When a resource need to be fetched, check whether it is 55 // contained in the cache and return the cached version, otherwise 56 // get it from the network. 57 self.addEventListener("fetch", e => { 58 e.respondWith(networkFallbackToCache(e.request)); 59 });