18n/dist-test/service-worker.js
2024-10-29 18:27:23 +08:00

94 lines
2.5 KiB
JavaScript

// cache名, 在控制台Application的CaChe下可以看到
const cacheName = "penueling";
// cache文件
const cacheFiles = ["/index.html", "/manifest.json"];
var offlineExclude = [
'/api/',
];
self.addEventListener('push', function (event) {
console.log('[Service Worker] Push Received.');
console.log(`[Service Worker] Push had this data: "${event.data.text()}"`)
let data = JSON.parse(event.data.text())
const title = data.notification.title || '';
const options = {
body: data.notification.body,
icon: data.notification.image || '',
badge: data.notification.image || ''
};
event.waitUntil(self.registration.showNotification(title, options));
});
self.addEventListener('notificationclick', function (event) {
console.log('[Service Worker] Notification click Received.');
event.notification.close();
event.waitUntil(
clients.openWindow('https://www.18n.com/')
);
});
/**
* 安装 Service Worker
* install事件是 Service Worker 执行的第一个事件,同一个 Service Worker 只会调用一次
* 即使 Service Worker 脚本文件只有一个字节不同,浏览器也将视为一个新的 Service Worker
*/
self.addEventListener("install", e => {
e.waitUntil(
caches.open(cacheName).then(cache => {
return cache.addAll(cacheFiles);
}),
);
});
/**
// * 激活 Service Worker
// * Service Worker 安装成功之后,会触发activate事件
// * 在这个阶段我们一般做一些清理旧缓存相关的工作
// */
// self.addEventListener("activate", (e) => {
// // e.waitUntil(caches.delete(cacheName));
// e.waitUntil(
// caches
// .keys()
// .then((keys) => {
// return Promise.all(
// keys.map((key) => {
// // 清理缓存
// if (cacheName !== key) {
// return caches.delete(key);
// }
// })
// );
// })
// .then(() => {
// console.log("cache deleted");
// })
// );
// });
self.addEventListener("fetch", e => {
if (e.request.cache === 'only-if-cached' && e.request.mode !== 'same-origin') {
return false
}
for (let i = 0; i < offlineExclude.length; i++) {
if (e.request.url.indexOf(offlineExclude[i]) !== -1) return false;
}
var u = e.request.url.replace('https://', '')
var n = u.indexOf('/')
if (u.slice(n, 60).indexOf('.') == -1) {
return false;
}
e.respondWith(
caches.match(e.request).then((response) => response || fetch(e.request)),
);
});