我可以为同一请求同时设置多个service worker来拦截它吗?

41

我正在编写一个图书馆,我将向第三方提供该图书馆以在其站点上运行服务工作者。它需要拦截所有网络请求,但我希望允许他们构建自己的服务工作者。

我是否可以使两个服务工作者都拦截相同的获取请求并在它们之间提供某种优先级/排序?或者,我应该使用其他模式吗?

谢谢

1个回答

64

不行,只能注册一个服务工作者来覆盖整个范围,因此最新的会将先前的替换掉,除非范围更具体,在这种情况下,请求仅由最具体的处理。

然而,您可以附加多个fetch处理程序,它们都将处理请求,因此也许您可以编写一个独立的脚本文件,并通过importScripts()让用户的服务工作者包含您的文件。

第一个调用event.respondWith()同步地(实际上,您无法异步调用此方法)赢得了胜利,尝试调用的其余处理程序将抛出异常。

优先级和协调需要中间件。您可以检查ServiceWorkerWaresw-toolbox


你知道sw-toolbox的替代品WorkBox是否支持中间件的概念吗? - Brett Zamir
你好,能否更新第一个链接?它已经失效了。 - Omar Dulaimi
@Salva 我有一个主网站 service worker,范围为 '/',还有另一个特定范围的游戏页面 service worker '/game'。但是主 service worker 的 fetch 处理程序被调用。我能检查其他东西来确保我的 /game service worker 被优先考虑吗? - pnk6
然而,许多服务工作者可以在同一域但不同范围的同一HTML页面上运行。 - jlguenego
确保 scope 值以斜杠结尾。 - KHAYRI R.R. WOULFE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接