Да, вы можете создать свой собственный handlerCallback
, который выполняет это.Некоторые детали могут различаться в зависимости от вашей конкретной настройки (имена кэша, резервные URL-адреса и т. Д.), А также от того, хотите ли вы использовать формальную стратегию Workbox (например, networkFirst
вместо fetch()
), но вВ общем, должно работать следующее:
// Assume that this URL is already cached somewhere, e.g. precached.
const fallbackUrl = '/404-fallback.html';
const notFoundFallbackHandler = async ({event}) => {
const fetchResponse = await fetch(event.request);
if (fetchResponse.status === 404) {
return caches.match(fallbackUrl);
} else {
return fetchResponse;
}
};
// To apply this handler based on a URL pattern:
workbox.routing.registerRoute(
new RegExp('/some/criteria/to/match'),
notFoundFallbackHandler
);
// Or, to apply this handler for all navigation requests, use this:
// const navigationRoute = new workbox.routing.NavigationRoute(notFoundFallbackHandler);
// workbox.routing.registerRoute(navigationRoute);