我在 iOS Safari 中有两个选项卡,它们都打开到同一页面。两个选项卡都有一个针对窗口对象上的存储事件的事件侦听器,并且当客户端单击/点击/类型时都会写入本地存储。
在 Internet Explorer 中,未交互的选项卡会接收存储事件,但 Safari 不会(在 Firefox 和 Chromium 浏览器上,我改为使用广播通道 API 来实现此目的)。另外,这段代码之前在 Safari 上测试过(恐怕我不记得是哪个版本)并且它有效。
我确保页面上没有抛出 JavaScript 错误,并且我没有在隐私浏览模式下进行测试。谁能想到为什么存储事件会停止触发?
起初我以为这是跟踪预防的一部分(对于试图通信的第三方页面上的页面和同一页面的 iframe 仍然是这种情况),但现在我认为这实际上是 Safari错误。
如果您需要在 Safari 中进行跨表通信,请使用 Service Worker。我首选的交叉表设置,按照首选回退到最不首选回退的顺序: