Я пытаюсь настроить работника службы, чтобы мое веб-приложение могло полностью работать в автономном режиме. Когда я проверяю кеш на static-v2
, все мои активы, которые я хочу, находятся там.
Когда я делаю запрос и нахожусь в сети, мой SW правильно выполняет выборку и не попадает в мой оператор catch.
Однако, когда я в автономном режиме и проваливаюсь в свой кэш, правильный ответ записывается со статусом 200, но я получаю ошибку chrome "no internet".
Другим интересным моментом является то, что даже когда я закомментирую строку, в которой я возвращаю отклик кэша и просто возвращаю жестко закодированный ответ, я все равно получаю ошибку «нет интернета».
Любая помощь в выяснении, почему мой работник службы не работает, как ожидалось, будет принята с благодарностью.
const CACHENAME = `static-v2`;
self.addEventListener('install', function(event) {
event.waitUntil(
caches.open(CACHENAME).then(function(cache) {
return cache
.addAll([
// your list of cache keys to store in cache
'bundle.js',
'index.html',
'manifest.json',
// etc.
])
.then(() => {
return self.skipWaiting();
});
}),
);
});
self.onactivate = (evt) => {
console.log(`on activate - ${CACHENAME}`);
evt.waitUntil(
caches.keys().then((cacheNames) => {
const deleteOldCaches = cacheNames.map((cacheName) => {
console.log(cacheName);
if (cacheName != CACHENAME) {
return caches.delete(cacheName);
}
return Promise.resolve();
});
return Promise.all(deleteOldCaches);
}),
);
self.clients.claim();
};
self.onfetch = (evt) => {
evt.waitUntil(
fetch(evt.request).catch((err) => {
caches.match(evt.request).then((response) => {
console.log(evt.request.url, response);
if (response) return response;
return new Response('<div><h2>Uh oh that did not work</h2></div>', {
headers: {
'Content-type': 'text/html',
},
});
});
}),
);
console.log(`on fetch - ${CACHENAME}`);
};
Я размещаю все свои активы (включая ПО) с помощью http-сервера (https://www.npmjs.com/package/http-server)
).