在工作箱中注册非导航路线

问题描述:

有没有办法在工作箱中仅匹配非导航请求?例如,我有一个包含我想在我的应用程序壳注入几个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(甚至一些支持服务工作者),并有一些角落情况下,失败。

是否有一种方便,最实用的方式来匹配非导航请求?

+0

接下来,看起来好像'request.mode'支持MDN资源,否则可能不准确 –

首先,你是这样广泛的正则表达式的问题。

一个简单的步骤是首先为请求添加路由知道可以先缓存,而不是导航路由(即带有扩展名的路径,如js,css,png,jpg)。

然后在那之后 - 使用你对构建的了解来匹配其他请求(即所有的网页请求都以html结尾,还是以斜线结尾?)。

您实际上可能只是想添加一个默认路由,以便如果没有路由匹配,则回退到默认路由并让其为shell提供服务。