fix: SW uses network-first strategy, updates apply without clearing storage
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -50,7 +50,7 @@ async fn pwa_manifest() -> impl IntoResponse {
|
|||||||
|
|
||||||
async fn service_worker() -> impl IntoResponse {
|
async fn service_worker() -> impl IntoResponse {
|
||||||
([(header::CONTENT_TYPE, "application/javascript")], r##"
|
([(header::CONTENT_TYPE, "application/javascript")], r##"
|
||||||
const CACHE = 'wz-v5';
|
const CACHE = 'wz-v6';
|
||||||
const SHELL = ['/', '/wasm/warzone_wasm.js', '/wasm/warzone_wasm_bg.wasm', '/icon.svg', '/manifest.json'];
|
const SHELL = ['/', '/wasm/warzone_wasm.js', '/wasm/warzone_wasm_bg.wasm', '/icon.svg', '/manifest.json'];
|
||||||
|
|
||||||
self.addEventListener('install', e => {
|
self.addEventListener('install', e => {
|
||||||
@@ -71,18 +71,17 @@ self.addEventListener('fetch', e => {
|
|||||||
if (url.pathname.startsWith('/v1/')) return;
|
if (url.pathname.startsWith('/v1/')) return;
|
||||||
// WS: skip
|
// WS: skip
|
||||||
if (url.protocol === 'ws:' || url.protocol === 'wss:') return;
|
if (url.protocol === 'ws:' || url.protocol === 'wss:') return;
|
||||||
// Shell: cache first, network fallback
|
// Network first, cache fallback (ensures updates are picked up immediately)
|
||||||
e.respondWith(
|
e.respondWith(
|
||||||
caches.match(e.request).then(cached => cached || fetch(e.request).then(resp => {
|
fetch(e.request).then(resp => {
|
||||||
if (resp.ok && SHELL.includes(url.pathname)) {
|
if (resp.ok && SHELL.includes(url.pathname)) {
|
||||||
const clone = resp.clone();
|
const clone = resp.clone();
|
||||||
caches.open(CACHE).then(c => c.put(e.request, clone));
|
caches.open(CACHE).then(c => c.put(e.request, clone));
|
||||||
}
|
}
|
||||||
return resp;
|
return resp;
|
||||||
}).catch(() => {
|
}).catch(() => caches.match(e.request).then(cached => {
|
||||||
if (e.request.mode === 'navigate') {
|
if (cached) return cached;
|
||||||
return caches.match('/');
|
if (e.request.mode === 'navigate') return caches.match('/');
|
||||||
}
|
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user