在Workbox中注册非导航路线

时间:2017-08-29 01:12:24

标签: workbox

有没有办法只匹配Workbox中的非导航请求?例如,我有一个包含几个AMP页面的应用程序,我想在我的应用程序shell中注入,因此我拦截了所有导航到这些页面并使用shell进行响应,如下所示:

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(甚至一些支持服务工作者)并且有一些失败的极端情况。

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

1 个答案:

答案 0 :(得分:2)

首先,你在这么广泛的正则表达式中遇到麻烦。

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

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

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