【问题标题】:Why did Safari drop support for SharedWorker?为什么 Safari 放弃了对 SharedWorker 的支持?
【发布时间】:2015-04-03 07:59:23
【问题描述】:

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

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

【问题讨论】:

标签: javascript html safari web-worker


【解决方案1】:

我找不到 SharedWorker 的任何 polyfill。

似乎可以通过在工作人员之间实现基于 StorageEvent 的通信端口来创建。缺点是 StorageEvents 对于 WebWorkers 来说是不可移植的,您必须在每个浏览器选项卡中维护状态,并知道何时打开/关闭每个 master worker。

【讨论】:

  • 你也可以使用MessageChannel,标签通过ServiceWorker相互发现
【解决方案2】:

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

如果 safari 允许我们使用SharedWorker,开发者(谷歌或跟踪公司)可以使用它来访问不同窗口标签之间的标识。

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


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

【讨论】:

【解决方案3】:

直接来自一位 WebKit 工程师:

Shared Web Workers 的实施令人不快 对发动机的限制。它从未获得任何采用。

来源here

【讨论】:

【解决方案4】:

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

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

注意:它不处理跨表通信,但您可以将CacheStorage APIServiceWorkerMessageChannel 一起使用或使用IndexedDBServiceWorker(来自@jakearchibald on Twitter) 创建类似的效果

另外:我应该提一下,Safari 正在努力支持 BroadcastChannel API,这将涵盖交叉表通信方面,它目前在 Webkit Technology Preview 中可用

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 2013-04-30
    • 1970-01-01
    • 2011-06-30
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2010-09-23
    相关资源
    最近更新 更多