L'erreur est Uncaught (in promise) Error: Not Found.
Cela semble être dû au fait que la fenêtre n'est pas disponible en interne. Self est un service worker ou une fenêtre.new Erreur() - Uncaught (promis) Erreur: Non trouvé
Le code ci-dessous est dans index.html et tout fonctionne correctement. Lorsqu'une requête réseau renvoie 404, elle évalue throwOnError
et cette erreur apparaît.
var throwOnError = (response) => {
if (response.status >= 200 && response.status < 300 || response.status === 0) {
return response;
}
throw new Error(response.statusText);
};
function cacheableRequestFailingToCacheStrategy({ event, cache }) {
return fetch(event.request)
.then(throwOnError) // do not cache errors
.then(response => {
cache.put(event.request, response.clone());
return response;
})
.catch(() => cache.match(event.request));
}
function isRequestForStatic(request) {
return /.(png|jpg|jpeg|gif|css|js)$/.test(request.url);
}
function isSideEffectRequest(request) {
console.log(request.method);
return ["POST", "PUT", "DELETE"].includes(request.method);
}
function cacheFailingToCacheableRequestStrategy({ event, cache }) {
return cache.match(event.request)
.then(throwOnError)
.catch(() => fetch(event.request)
.then(throwOnError)
.then(response => {
cache.put(event.request, response.clone());
return response;
})
);
}
function requestFailingWithNotFoundStrategy({ event }) {
return fetch(event.request)
.catch(() => {
const body = JSON.stringify({ error: "Sorry, you are offline. Please, try later." });
const headers = { "Content-Type": "application/json" };
const response = new Response(body, { status: 404, statusText: "Not Found", headers });
return response;
});
}
self.addEventListener("fetch", event => {
console.log(event.request);
if (isSideEffectRequest(event.request)) {
console.log("post", event.request.method);
event.respondWith(requestFailingWithNotFoundStrategy({ event }));
return;
}
if (isRequestForStatic(event.request)) {
event.respondWith(
caches.open(CACHE_NAME)
.then(cache => cacheFailingToCacheableRequestStrategy({ event, cache }))
);
return;
}
event.respondWith(
caches.open(CACHE_NAME)
.then(cache => cacheableRequestFailingToCacheStrategy({ event, cache }))
);
});
Le code me semble être pour un technicien de maintenance, mais vous dites "Le code ci-dessous est dans index.html". Pourriez-vous clarifier? –
Aussi: puisque vous avez du code là-bas qui génère réellement le "Non Trouvé", et lance des objets "Erreur", quel est le problème que vous essayez réellement de résoudre? –
Premièrement - Il s'agit d'un service worker ... mais je ne l'ai pas conservé dans un fichier sw.js séparé. Il est dans index.html pour un employé de portée globale. –