Javascript 在mobile Safari中,在私有模式下,本地存储不会在选项卡之间共享

Javascript 在mobile Safari中,在私有模式下,本地存储不会在选项卡之间共享,javascript,angular,safari,Javascript,Angular,Safari,在mobile Safari的私有模式下,我可以成功地将内容放入localStorage。如果我在两个不同的选项卡中打开我的web应用程序,它们将无法访问相同的localStorage。我的意思是,如果我在第一个选项卡中设置了一个值,我在第二个选项卡中的应用程序将看不到它。这也可能发生在其他浏览器的私有模式下,但我还没有机会测试它们 如果不是私有模式,同样的代码也可以正常工作。第二个选项卡可以访问第一个选项卡设置的值 本地存储是否有替代解决方案或者在专用模式下是不可能的?您可以在数据库中使用,但

在mobile Safari的私有模式下,我可以成功地将内容放入
localStorage
。如果我在两个不同的选项卡中打开我的web应用程序,它们将无法访问相同的
localStorage
。我的意思是,如果我在第一个选项卡中设置了一个值,我在第二个选项卡中的应用程序将看不到它。这也可能发生在其他浏览器的私有模式下,但我还没有机会测试它们

如果不是私有模式,同样的代码也可以正常工作。第二个选项卡可以访问第一个选项卡设置的值


本地存储是否有替代解决方案
或者在专用模式下是不可能的?

您可以在数据库中使用,但是专用模式专门用于阻止Cookie和本地存储形式,因此您无法在前端跨选项卡可靠地存储数据。用户知道这一点,他们不希望帐户保持登录状态或诸如此类。这就是说,如果你的功能看起来像是用户希望仍然能够跨选项卡使用它的东西,那么就花时间签出,然后。如果此数据需要特定于设备,您可以使用PHP使用
$\u SERVER['REMOTE\u ADDR']
获取用户的ip地址,并将数据与数据库中的ip关联,但请注意,如果用户更改网络,ip可能会更改。

您确实正确。我的应用程序向每个客户端发出一个GUID。客户端需要GUID在注册后激活其帐户。因此,当客户端从其邮箱的激活链接跳转时,将启动第二个选项卡,但无法获得相同的GUID,因此帐户激活失败。我在考虑IPs,但它将从根本上改变帐户注册过程。你可以在他们注册时将GUID发送到后端,并将其作为电子邮件中验证链接的参数发送。然后验证页面可以从URL中获取它。无论如何,这样做更好,因为他们可能已经在笔记本电脑上注册并在移动设备上激活。除非“每个客户端都有一个GUID”,否则你的意思是你想明确禁止跨设备兼容性,而我不希望我的用户这样做。我希望他们使用相同的设备和相同的浏览器来注册和激活。你可以玩一些疯狂的东西,比如结合我前面提到的跨设备方法,还可以发送屏幕大小、devicePixelRatio和其他特定于设备的数据,以及激活页面可以比较的GUID。当然它不是防弹的,但它是有意义的。你找到解决问题的办法了吗。您是否得到确认,这是safari在私有模式下的默认行为,本地存储不能跨选项卡共享