【发布时间】:2019-10-09 19:36:07
【问题描述】:
我正在处理的项目中遇到的问题是,我有一个单页应用程序。我正在处理浏览器客户端的导航路由,这让我可以在路由匹配时动态导入一些模块。我的路由设置看起来有点像这样:
router.setRoutes([
{
path: '/',
component: 'app-main', // statically loaded
},
{
path: '/posts',
component: 'app-posts',
action: () => { import('./app-posts.js').catch(() => Router.go('/offline');} // dynamically loaded
},
{
path: '/offline', network
component: 'app-offline', // also statically loaded
}
]);
为了清楚起见,这里是“应用”的简单图像:
我在我的服务工作者中缓存应用程序外壳,这意味着 main 页面和 offline 页面被预缓存,posts 页面应该在运行时被缓存(一旦请求,所以如果用户点击posts链接)
所以我的预缓存清单缓存:main.js、offline.js 和我的index.html。
我遇到的问题是:
- 用户失去网络连接
- 用户尝试转到
posts页面 - 如果之前没有被请求和缓存过,动态导入可能会失败(用户将被重定向到
offline页面)
但是当我的用户再次获得网络连接时,点击posts链接,动态导入仍然会失败;我猜是因为浏览器对动态导入进行了重复数据删除。
这是一个巨大的耻辱,因为我的用户有网络连接;这个请求应该成功!我能弄清楚如何处理这个问题的唯一方法是让用户重新加载页面,并再次请求posts 页面。
所以我的问题是,我应该怎么做?
【问题讨论】:
标签: service-worker progressive-web-apps workbox dynamic-import