我假设你的意思是,你想向服务工作者添加逻辑,使其请求资源,然后修改来自网络的响应,从而产生一个传递回页面的响应,该响应是你从网络获得的内容和服务工作者添加的内容的混合。
如果是,答案是肯定的,那么您可以对同源响应和使用CORS时的跨源响应执行此操作。(您不能修改
opaque responses
,这是在不使用CORS的情况下提出跨来源请求时得到的结果。)
以下是一个示例
fetch
响应假想的请求的处理程序
/api
向发出请求时返回JSON的端点
/api
,然后在将响应返回到页面之前向API响应添加附加字段。
async function modifyAPIResponse(request) {
const apiResponse = await fetch(request);
const json = await apiResponse.json();
json.extraField = 'set by fetch handler';
return new Response(JSON.stringify(json), {
// Ensure that the Content-Type: and other headers are set.
headers: apiResponse.headers,
});
}
self.addEventListener('fetch', (event) => {
const url = new URL(event.request.url);
if (url.pathname === '/api') {
event.respondWith(modifyAPIResponse(event.request));
}
});