Service Worker:离线时服务 offline.html
Service Worker: Serve offline.html instead when offline
我正在尝试设置我的站点服务工作者以在离线时显示 offline.html 文件,而不是用户试图获取的 HTML 文件不在缓存中。
根据 Workbox 文档 (https://developers.google.com/web/tools/workbox/guides/advanced-recipes#provide_a_fallback_response_to_a_route),我编写了下面的代码,但是每当我勾选 Chrome DevTools 中的离线复选框并访问 HTML 页面进行测试时,我得到 Chrome 的标准 "No internet" 恐龙页面。
workbox.precaching.precacheAndRoute([
'/offline.html'
]);
workbox.routing.setCatchHandler(({ event }) => {
switch (event.request.destination) {
case 'document':
return caches.match(workbox.precaching.getCacheKeyForURL('/offline.html'));
break;
default:
return Response.error();
}
});
您忘记注册路线。因此,永远不会调用 workbox.routing.setCatchHandler 函数。
将此代码添加到您的 Service Worker 应该可以解决问题
workbox.routing.registerRoute(
new RegExp('.html'),
new workbox.strategies.NetworkOnly({
cacheName: 'htmlcache'
})
);
你也可以参考这个例子:
https://progressify.org/building-a-pwa-with-an-offline-fallback-page-using-workbox/
我正在尝试设置我的站点服务工作者以在离线时显示 offline.html 文件,而不是用户试图获取的 HTML 文件不在缓存中。
根据 Workbox 文档 (https://developers.google.com/web/tools/workbox/guides/advanced-recipes#provide_a_fallback_response_to_a_route),我编写了下面的代码,但是每当我勾选 Chrome DevTools 中的离线复选框并访问 HTML 页面进行测试时,我得到 Chrome 的标准 "No internet" 恐龙页面。
workbox.precaching.precacheAndRoute([
'/offline.html'
]);
workbox.routing.setCatchHandler(({ event }) => {
switch (event.request.destination) {
case 'document':
return caches.match(workbox.precaching.getCacheKeyForURL('/offline.html'));
break;
default:
return Response.error();
}
});
您忘记注册路线。因此,永远不会调用 workbox.routing.setCatchHandler 函数。
将此代码添加到您的 Service Worker 应该可以解决问题
workbox.routing.registerRoute(
new RegExp('.html'),
new workbox.strategies.NetworkOnly({
cacheName: 'htmlcache'
})
);
你也可以参考这个例子: https://progressify.org/building-a-pwa-with-an-offline-fallback-page-using-workbox/