Właśnie próbowałem wdrożyć pracowników serwisowych do buforowania niektórych plików JSON i innych zasobów w witrynie statycznej (działającej pod kontrolą wersji localhost w wersji 47.0.2526.73 (wersja 64-bitowa)). Korzystając z cache.addAll(), dodałem moje pliki do pamięci podręcznej, a gdy otworzę kartę zasobów w chrome i kliknę pamięć podręczną, wszystkie pliki zostaną wyświetlone.Pracownik usługi buforuje pliki, ale zdarzenie fetch nigdy nie jest uruchamiane.
Problem mam jest to, że mój pracownik usługa jest wymieniony jako „aktywna” i „działa” w chrome: // service pracownika-wewnętrzne Jednak nie można ustalić, czy pracownik jest faktycznie przechwytywania żądania i udostępnianie buforowanych plików. Dodałem detektor zdarzeń i nawet kiedy pocieszyć rejestrować zdarzenia w służbie pracownicy Dev instancji narzędzia, nigdy nie uderza punkt krytyczny:
this.addEventListener('install', function(event) {
event.waitUntil(
caches.open('v1').then(function(cache) {
console.log(cache);
return cache.addAll([
'/json/0.json',
'/json/1.json',
'/json/3.json',
'/json/4.json',
'/json/5.json',
]);
})
);
});
this.addEventListener('fetch', function(event) {
console.log(event);
var response;
event.respondWith(caches.match(event.request).catch(function() {
return fetch(event.request);
}).then(function(r) {
response = r;
caches.open('v1').then(function(cache) {
cache.put(event.request, response);
});
return response.clone();
}).catch(function() {
}));
});
Zasadniczo używam przez rzeczy dokładnie tak, jak opisano w HTML5 skały pracowników usług intro, ale jestem pewien, że moje zasoby nie są obsługiwane z pamięci podręcznej. Zauważyłem, że zasoby udostępnione przez pracownika serwisu są oznaczone jako takie na karcie sieci devtools w kolumnie rozmiaru przez wskazanie "od pracowników serwisu".
Wygląda na to, że mój kod nie różni się od przykładów, ale z jakiegoś powodu nigdy nie trafia do zdarzenia pobierania. Istotą mojego kodu: https://gist.github.com/srhise/c2099b347f68b958884d
Znalazłeś rozwiązanie? –
Myślę, że wskazówka @Stephen Archers powinna być oznaczona jako poprawna. – user1532132
Tak, należy zaznaczyć odpowiedź @Stephen Archers jako poprawną. –