我有一个使用 workbox 2.0.0 的服务人员,对于某些页面,我使用的是 workboxSW.strategies.staleWhileRevalidate() 缓存策略:
const customFilter = {
cachedResponseWillBeUsed: function (input) {
try {
console.log('cacheResponseWillBeUsed for : ' + input.request.url);
// modify the response body here
} catch (e) {
console.error(e);
}
return input.cachedResponse;
},
requestWillFetch: function (input) {
try {
console.log('requestWillFetch for ' + input.request.url);
} catch (e) {
console.error(e);
}
return input.request;
},
fetchDidFail: function (input) {
console.log('A fetch request for ' + input.request.url + ' failed.');
}
}
const cachingStrategy = workboxSW.strategies.staleWhileRevalidate({
plugins: [
customFilter
]
});
workboxSW.router.registerRoute(
new RegExp('\/(.*)/suffix/?$'),
cachingStrategy
);
一切顺利,我可以即时更新从缓存中获得的响应。但我想即时修改所有响应,包括第一次从网络获取它们时(我必须在其中插入一些 javascript)。
从我的测试来看,cachedResponseWillBeUsed 只允许对来自缓存的响应进行后处理(根据方法名称),但我还没有找到一种方法来访问网络响应(否则通常仍然使用 staleWhileRevalidate 策略。)
有什么建议吗?
非常感谢