【发布时间】:2020-01-22 05:38:07
【问题描述】:
我的情况很简单。我想在刷新页面并且没有网络连接时显示自定义离线页面。
所以我使用带有 workbox pwa 的 cli 创建了一个 vue 应用程序。
这就是 vue.config.js 的样子:
module.exports = {
pwa: {
workboxPluginMode: 'InjectManifest',
workboxOptions: {
swSrc: 'public/service-worker.js',
swDest: 'service-worker.js',
}
}
};
我将此内容添加到public/offline.html:
<html>I'm the offline page</html>
在public/service-worker.js我确实有这个代码:
// public/service-worker.js
const offlinePage = '/offline.html';
workbox.setConfig({
debug: true
});
workbox.core.setCacheNameDetails({ prefix: 'my-app' });
self.addEventListener('message', event => {
if (event.data && event.data.type === 'SKIP_WAITING') {
self.skipWaiting();
}
});
const customHandler = async args => {
console.log('in customHandler!!1 route');
return (await caches.match(offlinePage));
};
workbox.routing.registerRoute('/', customHandler);
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.precacheAndRoute(self.__precacheManifest, {});
然后运行这个命令:
npm run build && http-server -p 3001 dist
现在,我通过浏览器访问 localhost:3001,应用程序已启动:Service worker has been registered.
我还看到 /offline 页面已缓存。
问题是当我打开“离线”复选框并刷新时。
我得到了 404。而不是离线页面。
最奇怪的是我的缓存中什么都没有。
不知道为什么会这样。如何在失去网络连接时提供离线页面?
【问题讨论】:
标签: vue.js service-worker progressive-web-apps workbox