-
Notifications
You must be signed in to change notification settings - Fork 0
/
serviceWorker.js
74 lines (74 loc) · 1.72 KB
/
serviceWorker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
var cacheStorageKey = "lk20191230";
var cacheList = [
"/",
"index.html",
"index.js",
"index.css",
"favicon.ico",
"font.css",
// "/icon/*",
// "/weather/*"
];
// 安装
self.addEventListener("install", e => {
e.waitUntil(
caches
.open(cacheStorageKey)
.then(cache => {
return cache.addAll(cacheList);
})
.then(() => self.skipWaiting())
);
});
// 处理动态缓存
self.addEventListener("fetch", e => {
let { request } = e;
e.respondWith(
caches.match(request).then(response => {
if (request.url === "http://127.0.0.1:8080/") {
console.log(caches, request, response);
}
if (response) {
return response;
}
// 对于 CDN 资源要更改 request 的 mode
if (
request.mode !== "navigate" &&
request.url.indexOf(request.referrer) === -1
) {
request = new Request(request, { mode: "cors" });
}
return fetch(request).then(fetchRes => {
if (!fetchRes || fetchRes.status !== 200 || request.method !== "GET") {
return fetchRes;
}
let resClone = fetchRes.clone();
caches.open(cacheStorageKey).then(cache => {
cache.put(request, fetchRes);
});
return resClone;
});
})
);
});
// 激活
self.addEventListener("activate", e => {
e.waitUntil(
caches
.keys()
.then(cacheNames => {
return Promise.all(
cacheNames
.filter(cacheName => {
return cacheName !== cacheStorageKey;
})
.map(cacheName => {
return caches.delete(cacheName);
})
);
})
.then(() => {
return self.clients.claim();
})
);
});