对于iOS 6. [某事]以后全屏Web应用程序的Cookie,SQLite数据和localStorage数据与Safari数据分开存储。我有一个令牌,我需要在保存到主屏幕时持久保存到主屏幕应用程序。
有没有人找到这个问题的优雅解决方案?非常难看的解决方案也将被考虑:)
答案 0 :(得分:42)
自iOS 5以来,Apple在使用Safari浏览器和现在被认为是沙箱应用程序之间的数据共享方面,使主屏幕书签越来越孤立。
在撰写本文时(iOS 7.1测试版),您只有一个选项。
加载页面时,使用JavaScript(window.location.search
)将令牌/数据添加到URL中的查询字符串参数。当用户将站点保存到其主屏幕时,URL将用作密钥。如果您检测到您处于主屏幕模式(window.standalone
),您的JavaScript可以轻松提取您之前潜入的查询字符串参数。这应该永远有效,除了URL中的值也将永远存在。
另一个提示''您想要携带到DOM中的主屏幕的任何值。从iOS的早期版本开始,将其保存到主屏幕时呈现的HTML将保持不变。启动主屏幕Web应用程序时,不会从URL 请求内容。它只是加载以前保存的HTML而没有初始Web请求(将请求HTML中的所有链接到CSS和JS,而不是页面本身)。知道HTML永远保存,你也可以在其中保存任何内容。更新网页的唯一方法是,如果您没有通过AJAX提取内容,请执行 windows.reload
或同等重定向。简而言之,例如,将您的价值注入隐藏的输入字段,它将被转移。
选项#1可能会永远持续下去,主屏幕不会以任何方式改变URL。只要确保你有一些JS来翻转开关并重新加载页面,如果你想要摆脱它。
选项#2有点危险,因为有一天,所有知道Apple的人都可以决定实际应该创建初始页面请求,而不是在保存时使用相同的HTML。然后,这将消除您拥有的数据以及DOM中任何元素的当前状态。
UPDATE :DOM注入技术不再有效(iOS 7+),只有从服务器直接下载的DOM才会保存到主屏幕。运行期间所做的任何动态更改都将丢失。淘汰选项#2,因为问题适用于iOS 7而且它的工作时间更长,只留下选项#1,在URL中添加了一些内容,这些内容将始终保存到主屏幕。