若干解决 Safari 和 Safari 移动版的 Iframe localStorage 问题

37

我有一个JavaScript函数,它将在我的页面的iframe中执行以设置本地存储。 在另一个页面上,同一域名下托管的另一个iframe将尝试读取该值。 下面是一个示意图:

Domain A
  |---- iframe - Domain B => Set localStorage

Domain C
  |---- iframe - Domain B => Read localStorage

localStorage函数(读取和写入)均托管在相同的域名(域名B)上。 在Safari和Safari移动版中,从页面A中的iframe传递到页面C中的iframe的值未被传输。在Chrome和Firefox中正常工作。在Safari中,它的表现就像iframe的localStorage仅限于顶部页面域而不跨页面传输,即使iframe域相同也是如此。是否有人在Safari上遇到了相同的本地存储问题?


是的,我这里也遇到了同样的问题。 - adardesign
是的,我遇到了同样的问题。我想看一些文档,但没有找到任何相关的文献。 - robC
1个回答

19
在Safari中,问题是由于“阻止cookie和其他网站数据”偏好设置默认为“来自第三方和广告商”所致。
更新:在Safari 8上,此选项为“Cookie和网站数据:允许来自我访问的网站”。
只有当用户将此选项设置为“永不”时,才能获得预期的行为。如下图片所示:http://i.stack.imgur.com/AP4ed.png 遗憾的是,很少存在漏洞-设置的意图很明确。

有人知道如何在“来自第三方和广告商”设置时在域之间共享localStorage数据吗? - fedor.belov
2
这不正确。因为像disqus和facebook这样的网站在localstorage和cookies中设置了很多变量,所以必须有一种方法。 - Sahan
2
为什么“cookies”可以访问而“localStorage”不行?这明显是一个bug,Safari应该修复它。 - Darshan
有解决办法。请参见:https://dev59.com/K1IG5IYBdhLWcg3wlCO8#64018207 - Eliezer Berlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接