处理服务工作者中的提取但允许客户端查看重定向

时间:2015-07-02 20:03:59

标签: service-worker

我有一个网址/users/sign_out,应该注销用户并将其重定向到我的根网址/。我想通过我的服务工作者来处理这个提取,因为我想在将用户发送回root之前清除缓存中的一些项目。但是,由于客户端看不到服务工作人员提取时发生的重定向,因此用户会在我的初始屏幕上结束,但会看到重定向前地址/users/sign_out

目前有什么方法可以处理抓取并允许客户端查看正确的最终网址吗?

看来最终将会有一个Response.redirect()方法,允许使用最终网址更新回复。看起来似乎也有某种finalURL选项也可以解决这种情况。但是我现在可以使用什么吗?在Twitter上,Jake Archibald(@jaffathecake)表示我可以自己构建一个新的响应 - 我可以,但即使在查看规范和MDN文档之后,我仍然无法弄清楚如何指定正确的URL它

如果实际上有一种方法可以构建一个能够满足我需要的Response对象,那么有人可以告诉我它是如何工作的吗?

1 个答案:

答案 0 :(得分:2)

https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker/mock-responses上有一个示例,展示了如何创建Response对象并使用它来响应fetch事件。

在这种情况下,我们会通过正文创建200 OK响应,但没有什么可以阻止您创建任意响应。您可能需要302 Found用于您的用例,因此您可以执行以下操作:

var responseInit = {
  status: 302,
  statusText: 'Found',
  headers: {
    Location: '/' // Or whatever URL you want to redirect to.
  }
};

var redirectResponse = new Response('', responseInit);
event.respondWith(redirectResponse);

您可以在回复此事件之前添加清除fetch处理程序中的缓存的代码,并且您显然希望首先检查event.request.url值,以确保只响应使用您的自定义回复请求/users/sign_out