为什么 Safari 放弃了对 SharedWorker 的支持?

Why did Safari drop support for SharedWorker?

为什么 Safari 放弃了对 SharedWorker 的支持?

是否有任何有效的 polyfill 使用例如 localStorage 和 StorageEvent 作为通信端口? (是的,shim 必须检测并重新创建 master Worker)

我找不到任何适用于 SharedWorker 的 polyfill。

似乎可以通过跨工作程序实现基于 StorageEvent 的通信端口来创建。缺点是 StorageEvents 对于 WebWorker 来说不可移植,你必须在每个浏览器选项卡上维护状态,并且知道什么时候轻弹 on/off 每个 master worker。

由于 safari 的默认 cookie 行为阻止了第三方 cookie 的跟踪。

如果 safari 允许我们使用 SharedWorker,开发人员(google 或跟踪公司)可以使用它来访问不同 window 选项卡之间的身份。

这就是 Safari 放弃 SharedWorker 的原因,有趣的是,它支持 WebWorker 但不支持 SharedWorker


这是我的猜测,不是官方原因。

直接来自一位 WebKit 工程师:

The implementation of Shared Web Workers was imposing undesirable constraints on the engine. It never gained any adoption.

来源here

根据我的理解,这里的答案是正确的,但这也是由于 SharedWorker 网络开发人员未采用(先有鸡还是先有蛋的情况)。

如果您需要 polyfill,可以使用我创建的那个。我无法为我的一个项目找到一个,所以我创建了这个,https://sharedworker.okikio.dev/

Note: it doesn't handle cross tab communication, but you can use the CacheStorage API together with a ServiceWorker and MessageChannel or use IndexedDB and ServiceWorker (from @jakearchibald on Twitter) to create a similar effect

Also: I should mention that Safari is working on supporting the BroadcastChannel API, which would cover the cross tab communication aspect, it's currently available in the Webkit Technology Preview