我们有一个在Facebook上运行的Web应用程序(即运行在不同域的iFrame中)。如果Safari用户的Cookie和网站数据设置为默认值“允许来自我访问的网站”,我们通过localStorage.setItem存储的数据就像sessionStorage一样行事,即它在用户当前会话之外不可用(即在用户关闭后该选项卡)。如果我们将设置更改为“始终允许”,就像Chrome,IE等一样工作正常。Safari localStorage在会话之间不会持久
作为一项测试,我们尝试直接浏览器到我们的应用程序域(https://ourappname.appspot.com),它工作正常那里。而且它也应该是一个真正的访问过的网站,但是当回到Facebook的游戏时,问题依然存在。
请注意,setItem调用成功,只是getItem不会在后续会话中返回任何内容。 (因此,当用户为Private Browsing且setItem调用本身失败并且出现Quota Exceeded错误时,它不会如此)。
我们需要做些什么来支持Safari,以便我们在Facebook上运行的应用程序可以使用localStorage作为意图在哪些数据将在会话之间生存?
奇怪的是,我刚刚在Safari 8.0.7(10600.7.12)中测试了“允许我访问的网站”。我设置了一个localStorage密钥,然后关闭浏览器(使用⌘+ Q),当我重新打开浏览器并使用localStorage.getItem时,它就在那里。 – daviddoran
@daviddoran谢谢。您是否测试了与顶级网站不同的iFrame中运行的网站?我会编辑我的问题,使其更清楚。 – leontx