1

我对服务工作者的策略是,如果 url 匹配某种特定格式,那么只有服务工作者应该拦截它,否则浏览器应该像往常一样处理它,

对于所有情况,我都使用 evt.respondWith() 来拦截它并提供自定义响应,但是如果 url 不匹配任何格式我该怎么办

我有几个选项,所有选项都有效,但我不确定哪一个在逻辑上是正确的

1)什么都不做,意味着我有 if 条件来检查 fetch 方法中定义的每个格式,但如果它们不匹配我什么都不做,我没有任何“else”条件。在这种情况下,浏览器正在正常获取页面,但我不确定它是否正确,实际发生了什么,cookies 是否通过了?

2)在 else 方法中我fetch(event.request, { credentials: 'include' }); 也可以使用,我不确定是否需要在此处包含凭证子句,根据我的理解,不是服务工作者,而是浏览器在此处处理请求,因此它会自动包含 cookie。如果我在这里错了,请纠正我。

3)event.respondWith(fetch(event.request, { credentials: 'include' }));

这也有效,我认为因为我使用的是 event.respondWith,所以我需要明确地包含凭证(我再次不确定)。但我怀疑我是否需要在event.respondWith这里使用。我所知道的event.respondWith是,只有当我们想为 fetch 事件提供自定义响应时,我们才使用它。因为我们希望这些请求按原样处理,我们需要在这里使用event.respondWith吗?

我所有的困惑都来自我缺乏知识event.respondWith(),有人可以解释一下,我应该什么时候使用它?

4

1 回答 1

1

event.respondWith允许您使用您创建的响应来响应网络请求(使用fetchCache API,甚至使用Response 构造函数手动创建)。

如果您不在fetch事件处理程序中调用它,浏览器将处理该请求。

如果你用 调用它fetch(event.request),它基本上和让浏览器处理它是一样的(因为如果你没有调用它,浏览器fetch会执行完全相同的请求event.respondWith)。

请注意,event.respondWith它将以您传递给它的值或您传递给它的 Promise 解析为的值响应。

event.respondWith(new Response('Some body.'));

event.respondWith(new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve(new Response('Some body.'));
  }, 1000);
}));
于 2016-02-24T11:26:27.443 回答