Browse Source

加入service-worker的主动激活更新

tags/v24.3
枫谷剑仙 4 years ago
parent
commit
fc817d4d73
1 changed files with 38 additions and 30 deletions
  1. +38
    -30
      service-worker.js

+ 38
- 30
service-worker.js View File

@@ -6435,39 +6435,47 @@ const cachesMap = new Map([
]
]);

// 安装阶段跳过等待,直接进入 active
self.addEventListener('install', function (event) {
event.waitUntil(self.skipWaiting());
});

self.addEventListener('activate', function(event) {
console.debug("Service Worker activate");

event.waitUntil(
caches.keys().then(function(keyList) { //所有的现存的缓存大分类列表
return Promise.all(
keyList.map(async function(key) {
if (cacheName !== key) { //如果不在当前的缓存列表里就删除
console.debug("未检测到该缓存分类,删除", key);
return caches.delete(key);
} else {
const cache = await caches.open(key);
const requests = await cache.keys();
console.debug("检测已有缓存分类", key);
return Promise.all(
requests.map(async function(request) {
const url = new URL(request.url);
const baseUrl = new URL(".", location);
const path = url.pathname;
const relativePath = (url.origin + path).replace(baseUrl.origin + baseUrl.pathname, "");
const oldmd5 = url.searchParams.get("md5"); //老的md5值
const md5 = cachesMap.get(relativePath); //记录的md5值
//console.debug("检测缓存条目", url, relativePath, oldmd5, md5);
if (!md5 || md5 !== oldmd5) {
console.debug("删除版本不匹配的缓存", request);
return cache.delete(request);
}
})
);
}
})
);
})
Promise.all([
self.clients.claim(),
caches.keys().then(function(keyList) { //所有的现存的缓存大分类列表
return Promise.all(
keyList.map(async function(key) {
if (cacheName !== key) { //如果不在当前的缓存列表里就删除
console.debug("未检测到该缓存分类,删除", key);
return caches.delete(key);
} else {
const cache = await caches.open(key);
const requests = await cache.keys();
console.debug("检测已有缓存分类", key);
return Promise.all(
requests.map(async function(request) {
const url = new URL(request.url);
const baseUrl = new URL(".", location);
const path = url.pathname;
const relativePath = (url.origin + path).replace(baseUrl.origin + baseUrl.pathname, "");
const oldmd5 = url.searchParams.get("md5"); //老的md5值
const md5 = cachesMap.get(relativePath); //记录的md5值
//console.debug("检测缓存条目", url, relativePath, oldmd5, md5);
if (!md5 || md5 !== oldmd5) {
console.debug("删除版本不匹配的缓存", request);
return cache.delete(request);
}
})
);
}
})
);
})
])
);
});



Loading…
Cancel
Save