Próbuję zintegrować pracowników serwisu z moją aplikacją, ale zauważyłem, że pracownik serwisu próbuje pobrać buforowaną zawartość nawet w trybie online, ale chcę, aby preferowała sieć w takich sytuacjach. Jak mogę to zrobić? Poniżej znajduje się kod, który mam teraz, ale nie wierzę, że działa. Kod instalacyjny SW jest pominięty dla zwięzłości.Użyj pamięci podręcznej ServiceWorker tylko w trybie offline.
var CACHE_NAME = 'my-cache-v1';
var urlsToCache = [
/* my cached file list */
];
self.addEventListener('install', function(event) {
// Perform install steps
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
/* request is being made */
self.addEventListener('fetch', function(event) {
event.respondWith(
//first try to run the request normally
fetch(event.request).catch(function() {
//catch errors by attempting to match in cache
return caches.match(event.request).then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
});
})
);
});
To wydaje się prowadzić do ostrzeżenia jak The FetchEvent for "[url]" resulted in a network error response: an object that was not a Response was passed to respondWith().
Jestem nowy na pracowników usług, więc przepraszam za każdym błędnej terminologii lub złych praktyk, będą wdzięczne za wszelkie wskazówki. Dziękuję Ci!
Czy ostrzeżenia pojawiają się tylko w trybie offline? Możliwe, że otrzymujesz zapytania o nieoczekiwane adresy URL, takie jak favicons, które nie są przechowywane w twoim zdarzeniu instalacji pamięci podręcznej. –
Stało się to w trybie online, kiedy pracownik serwisu wydaje się działać zgodnie z oczekiwaniami. –
EDYCJA: Te błędy pojawiają się również w trybie offline, ale masz rację, tylko w przypadku zasobów, których nie zapisałem w pamięci podręcznej. –