|
|
|
const CACHE_NAME = 'app-cache-v1742913244689'; |
|
const ASSETS_PATTERN = /\/assets\//; |
|
|
|
const urlsToCache = [ |
|
'/', |
|
'/index.html' |
|
|
|
]; |
|
|
|
|
|
self.addEventListener('install', (event) => { |
|
event.waitUntil( |
|
caches.open(CACHE_NAME) |
|
.then((cache) => { |
|
console.log('缓存已打开'); |
|
return cache.addAll(urlsToCache); |
|
}) |
|
.then(() => { |
|
|
|
return self.skipWaiting(); |
|
}) |
|
); |
|
}); |
|
|
|
|
|
self.addEventListener('activate', (event) => { |
|
event.waitUntil( |
|
caches.keys().then((cacheNames) => { |
|
return Promise.all( |
|
cacheNames.map((cacheName) => { |
|
if (cacheName !== CACHE_NAME) { |
|
console.log('删除旧缓存:', cacheName); |
|
return caches.delete(cacheName); |
|
} |
|
}) |
|
); |
|
}).then(() => { |
|
|
|
return self.clients.claim(); |
|
}) |
|
); |
|
}); |
|
|
|
self.addEventListener('fetch', (event) => { |
|
|
|
if (ASSETS_PATTERN.test(event.request.url)) { |
|
event.respondWith( |
|
caches.match(event.request).then((cachedResponse) => { |
|
|
|
if (cachedResponse) { |
|
return cachedResponse; |
|
} |
|
|
|
|
|
return fetch(event.request).then((response) => { |
|
|
|
if (!response || response.status !== 200 || response.type !== 'basic') { |
|
return response; |
|
} |
|
|
|
|
|
const responseToCache = response.clone(); |
|
|
|
caches.open(CACHE_NAME).then((cache) => { |
|
cache.put(event.request, responseToCache); |
|
}); |
|
|
|
return response; |
|
}); |
|
}) |
|
); |
|
} else { |
|
|
|
event.respondWith( |
|
fetch(event.request).catch(() => { |
|
return caches.match(event.request); |
|
}) |
|
); |
|
} |
|
}); |
|
|
|
|
|
|
|
|
|
self.addEventListener('message', (event) => { |
|
|
|
if (event.data && event.data.type === 'SKIP_WAITING') { |
|
self.skipWaiting(); |
|
} |
|
}); |
|
|