在工作箱中注册非导航路线
问题描述:
有没有办法在工作箱中仅匹配非导航请求?例如,我有一个包含我想在我的应用程序壳注入几个AMP网页的应用程序,所以我拦截所有导航到这些网页,并与外壳回应,就像这样:在工作箱中注册非导航路线
workboxSW.router.registerNavigationRoute('shell.html', {
whitelist: [/./]
});
我也想拦截所有其他请求并处理它们与缓存第一个策略,是这样的:
workboxSW.router.registerRoute('/*',
workboxSW.strategies.cacheFirst()
);
但是这条路线与第一路线重叠。我可以用下面的代码替换两种途径获得我在寻找的行为:
workboxSW.router.registerRoute('/*', args => {
if (args.event.request.mode !== 'navigate') {
return workboxSW.strategies.cacheFirst().handle(args);
}
return caches.match('/shell.html', {ignoreSearch: true});
});
但request.mode是not supported by several mobile browsers(甚至一些支持服务工作者),并有一些角落情况下,失败。
是否有一种方便,最实用的方式来匹配非导航请求?
答
首先,你是这样广泛的正则表达式的问题。
一个简单的步骤是首先为请求添加路由知道可以先缓存,而不是导航路由(即带有扩展名的路径,如js,css,png,jpg)。
然后在那之后 - 使用你对构建的了解来匹配其他请求(即所有的网页请求都以html结尾,还是以斜线结尾?)。
您实际上可能只是想添加一个默认路由,以便如果没有路由匹配,则回退到默认路由并让其为shell提供服务。
接下来,看起来好像'request.mode'支持MDN资源,否则可能不准确 –