Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript iOS Safari中未触发存储事件_Javascript_Local Storage_Mobile Safari - Fatal编程技术网

Javascript iOS Safari中未触发存储事件

Javascript iOS Safari中未触发存储事件,javascript,local-storage,mobile-safari,Javascript,Local Storage,Mobile Safari,iOS Safari中有两个选项卡,都打开到同一页面。这两个选项卡都有一个事件监听器,用于窗口对象上的存储事件,并且在客户端单击/轻触/键入时都写入本地存储 在Internet Explorer中,未与之交互的选项卡接收存储事件,但不接收Safari(在Firefox和Chromium浏览器上,我使用广播频道API进行此操作)。此外,这段代码以前在Safari上进行过测试(恐怕我记不清是哪个版本了),并且运行正常 我确保页面上没有抛出JavaScript错误,并且我没有在私人浏览模式下进行测试。

iOS Safari中有两个选项卡,都打开到同一页面。这两个选项卡都有一个事件监听器,用于窗口对象上的存储事件,并且在客户端单击/轻触/键入时都写入本地存储

在Internet Explorer中,未与之交互的选项卡接收存储事件,但不接收Safari(在Firefox和Chromium浏览器上,我使用广播频道API进行此操作)。此外,这段代码以前在Safari上进行过测试(恐怕我记不清是哪个版本了),并且运行正常


我确保页面上没有抛出JavaScript错误,并且我没有在私人浏览模式下进行测试。有人能想到为什么存储事件会停止触发吗?

起初我认为这是一部分(第三方页面上的页面和同一页面的iframe仍在尝试通信),但现在我认为这实际上是一个错误

如果您需要在Safari中进行跨选项卡通信,请使用服务人员。我的首选交叉选项卡设置,按首选回退到最不首选回退的顺序:

  • 如果支持,请使用,因为这实际上就是他们设计的用例。Safari或IE不支持
  • 使用服务工作者的消息事件。这是目前Safari中唯一有效的方法,但经常叫醒服务人员并不好。请注意,服务人员不在Firefox私有浏览模式下工作,所以Firefox支持BroadcastChannel是件好事
  • 使用存储事件。这是Internet Explorer中唯一可用的跨选项卡通信方法,但是如果您不需要支持IE(幸运的是您),那么请不要后退这么远。请注意,这在Safari私有浏览模式下不起作用(设置localStorage项会引发错误)。还请注意,IE localStorage存在一个缺陷,这意味着存储事件的newValue属性实际上是oldValue,因此您需要在设置localStorage值以触发它两次后删除它,第二次使用正确的值

  • 还要注意的是,上述任何一项都不允许您在Safari中在第一方和第三方上下文之间进行通信。

    起初,我认为这是一部分(第三方页面上的页面和同一页面的iframe仍在尝试通信),但现在我认为这实际上是一个问题

    如果您需要在Safari中进行跨选项卡通信,请使用服务人员。我的首选交叉选项卡设置,按首选回退到最不首选回退的顺序:

  • 如果支持,请使用,因为这实际上就是他们设计的用例。Safari或IE不支持
  • 使用服务工作者的消息事件。这是目前Safari中唯一有效的方法,但经常叫醒服务人员并不好。请注意,服务人员不在Firefox私有浏览模式下工作,所以Firefox支持BroadcastChannel是件好事
  • 使用存储事件。这是Internet Explorer中唯一可用的跨选项卡通信方法,但是如果您不需要支持IE(幸运的是您),那么请不要后退这么远。请注意,这在Safari私有浏览模式下不起作用(设置localStorage项会引发错误)。还请注意,IE localStorage存在一个缺陷,这意味着存储事件的newValue属性实际上是oldValue,因此您需要在设置localStorage值以触发它两次后删除它,第二次使用正确的值
  • 还要注意的是,上述任何一项都不允许您在Safari中的第一方和第三方上下文之间进行通信