为什么 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
为什么 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
andMessageChannel
or useIndexedDB
andServiceWorker
(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