我在Service Worker
中的fetch中使用此命令 if (event.request.method =='POST') {
event.respondWith(fetch(event.request,{method: 'post'}));
return;
}
但是我收到了这个错误:
未捕获(承诺)TypeError:无法在'ServiceWorkerGlobalScope'上执行'fetch':无法使用模式为'navigate'且非空RequestInit的请求构造请求。
我该怎么办?
答案 0 :(得分:2)
根据您提供的示例代码,当您处理fetch
事件时,您似乎只想实现默认的,假装时那样的服务工作者行为POST
请求。
最简单的方法是首先不要调用event.respondWith()
。调用event.respondWith()
是可选的,如果您不在fetch
处理程序中调用它,服务工作者将查找任何其他已注册的fetch
处理程序,并让他们有机会回复
如果fetch
事件处理程序都没有响应,那么请求将通过浏览器缓存(取决于请求标头和缓存状态)或网络来完成,就像没有服务一样工人参与。
如果出于某种原因,你真的需要调用`event.respondWith(),但是你想模仿默认行为,那么使用
event.respondWith(fetch(event.request));
应该有效,即省略{method: 'post'}
位。 event.request
已经知道它是POST
,所以没有必要将其他任何内容传递给fetch()
,以便告诉它。