Skip to content

Commit d3486c2

Browse files
committed
fix: harden service worker fetch fallback
1 parent 2d492fc commit d3486c2

1 file changed

Lines changed: 7 additions & 4 deletions

File tree

public/serviceworker.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ const CACHE_NAME = {
1515
ASSETS: 'assets-v2',
1616
};
1717

18+
const offlineResponse = () => new Response('Offline', { status: 503 });
19+
1820
self.addEventListener('install', (event) => {
1921
event.waitUntil(
2022
caches.open(CACHE_NAME.ASSETS).then((cache) => {
@@ -40,20 +42,21 @@ self.addEventListener('activate', (event) => {
4042
});
4143

4244
self.addEventListener('fetch', (event) => {
45+
// Navigation requests get a simple offline fallback.
4346
if (event.request.mode === 'navigate') {
44-
event.respondWith(
45-
fetch(event.request).catch(() => new Response('Offline', { status: 503 }))
46-
);
47+
event.respondWith(fetch(event.request).catch(() => offlineResponse()));
4748
return;
4849
}
4950

51+
// Subresource requests must also resolve to a Response object.
52+
// If network fails, return cache when possible and never reject.
5053
event.respondWith(
5154
caches.match(event.request).then((response) => {
5255
if (response) {
5356
return response;
5457
}
5558

56-
return fetch(event.request);
59+
return fetch(event.request).catch(() => offlineResponse());
5760
})
5861
);
5962
});

0 commit comments

Comments
 (0)