|
1 | | -self.addEventListener("install", (event) => event.waitUntil(onInstall(event))); |
2 | | -self.addEventListener("activate", (event) => event.waitUntil(onActivate(event))); |
3 | | -self.addEventListener("fetch", (event) => event.respondWith(onFetch(event))); |
4 | | - |
5 | | -let cacheNamePrefix = "resource-cache"; |
6 | | -let cacheName = ""; |
7 | | - |
8 | | -// Cache files when the service worker is installed or updated |
9 | | -async function onInstall(event) { |
| 1 | +self.addEventListener("install", function (e) { |
10 | 2 | self.skipWaiting(); |
11 | | - console.log("SW Installed"); |
12 | | -} |
13 | | - |
14 | | -// Cleanup old caches |
15 | | -async function onActivate(event) { |
16 | | - console.log("SW Activated"); |
17 | | -} |
18 | | - |
19 | | -// Try to respond with cached files |
20 | | -async function onFetch(event) { |
21 | | - if (event.request.url.indexOf(self.origin) === 0) { |
22 | | - const cache = await caches.open(cacheName); |
23 | | - const cachedResponse = await cache.match(event.request); |
24 | | - if (cachedResponse) { |
25 | | - return cachedResponse; |
26 | | - } |
27 | | - } |
28 | | - return fetch(event.request); |
29 | | -} |
| 3 | +}); |
30 | 4 |
|
31 | | -self.addEventListener("message", async (event) => { |
32 | | - cacheName = `${cacheNamePrefix}-${event.data.version}`; |
33 | | - const cacheKeys = await caches.keys(); |
34 | | - await Promise.all(cacheKeys.filter((key) => key.startsWith(cacheNamePrefix) && key !== cacheName).map((key) => caches.delete(key))); |
35 | | - if (event.data?.assets) { |
36 | | - const assetsRequests = event.data.assets.map((asset) => { |
37 | | - return new Request(asset, { |
38 | | - cache: "reload", |
39 | | - }); |
40 | | - }); |
41 | | - for (const request of assetsRequests) { |
42 | | - await caches |
43 | | - .open(cacheName) |
44 | | - .then((cache) => cache.add(request)) |
45 | | - .catch((error) => { |
46 | | - console.error("Failed to cache:", request, error); |
47 | | - }); |
48 | | - } |
49 | | - } |
50 | | - self.clients |
51 | | - .matchAll({ |
52 | | - includeUncontrolled: true, |
53 | | - type: "window", |
| 5 | +self.addEventListener("activate", (e) => { |
| 6 | + caches.keys().then((cacheNames) => { |
| 7 | + return Promise.all( |
| 8 | + cacheNames.map((cacheName) => { |
| 9 | + caches.delete(cacheName); |
| 10 | + }) |
| 11 | + ); |
| 12 | + }); |
| 13 | + self.registration |
| 14 | + .unregister() |
| 15 | + .then(function () { |
| 16 | + return self.clients.matchAll(); |
54 | 17 | }) |
55 | | - .then((clients) => { |
56 | | - if (clients && clients.length) { |
57 | | - clients[0].postMessage(event.data.version); |
58 | | - } |
| 18 | + .then(function (clients) { |
| 19 | + clients.forEach((client) => client.navigate(client.url)); |
59 | 20 | }); |
60 | 21 | }); |
0 commit comments