有没有办法只匹配 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不受多个移动浏览器(甚至一些支持 Service Worker)的支持,并且在一些极端情况下它会失败。
是否有一种方便、最实用的方法来匹配非导航请求?