iOS7 Safari:保存到主屏幕并保留令牌

时间:2014-01-14 09:10:44

标签: ios cookies ios7 safari iphone-standalone-web-app

对于iOS 6. [某事]以后全屏Web应用程序的Cookie,SQLite数据和localStorage数据与Safari数据分开存储。我有一个令牌,我需要在保存到主屏幕时持久保存到主屏幕应用程序。

有一个Cookie测试人员here。并讨论here

有没有人找到这个问题的优雅解决方案?非常难看的解决方案也将被考虑:)

1 个答案:

答案 0 :(得分:42)

自iOS 5以来,Apple在使用Safari浏览器和现在被认为是沙箱应用程序之间的数据共享方面,使主屏幕书签越来越孤立。

  • iOS< = 5 :一切都很酷,本地存储空间,Cookie,主屏幕和网页之间共享作品。网站和主屏幕之间的过渡是无缝的,网络开发人员很高兴。
  • iOS 6 :Apple开始将Home Screen应用程序(包括从Web保存的应用程序)视为沙盒应用程序。显然,显示已保存站点的主屏幕应用程序成为WebView控件,并未嵌入Safari本身。这阻止了本地存储的传输,但您仍然可以共享cookie。
  • iOS< = 6.x :Cookie在某个点发布后变得有些不可靠,它们仍然是共享的,但在第一次保存时没有转移。如果您回到该网站并执行了一些操作,那么该主页应用程序可以使用该cookie。
  • iOS 7 :主屏幕与保存网站之间的所有形式的数据共享(本地存储,Cookie等)都已丢失(几乎),破坏了开发人员的注意力梦想世界。

在撰写本文时(iOS 7.1测试版),您只有一个选项。

  1. 加载页面时,使用JavaScript(window.location.search)将令牌/数据添加到URL中的查询字符串参数。当用户将站点保存到其主屏幕时,URL将用作密钥。如果您检测到您处于主屏幕模式(window.standalone),您的JavaScript可以轻松提取您之前潜入的查询字符串参数。这应该永远有效,除了URL中的值也将永远存在。

  2. 另一个提示''您想要携带到DOM中的主屏幕的任何值。从iOS的早期版本开始,将其保存到主屏幕时呈现的HTML将保持不变。启动主屏幕Web应用程序时,不会从URL 请求内容。它只是加载以前保存的HTML而没有初始Web请求(将请求HTML中的所有链接到CSS和JS,而不是页面本身)。知道HTML永远保存,你也可以在其中保存任何内容。更新网页的唯一方法是,如果您没有通过AJAX提取内容,请执行windows.reload或同等重定向。简而言之,例如,将您的价值注入隐藏的输入字段,它将被转移。

  3. 选项#1可能会永远持续下去,主屏幕不会以任何方式改变URL。只要确保你有一些JS来翻转开关并重新加载页面,如果你想要摆脱它。

    选项#2有点危险,因为有一天,所有知道Apple的人都可以决定实际应该创建初始页面请求,而不是在保存时使用相同的HTML。然后,这将消除您拥有的数据以及DOM中任何元素的当前状态。

    UPDATE :DOM注入技术不再有效(iOS 7+),只有从服务器直接下载的DOM才会保存到主屏幕。运行期间所做的任何动态更改都将丢失。淘汰选项#2,因为问题适用于iOS 7而且它的工作时间更长,只留下选项#1,在URL中添加了一些内容,这些内容将始终保存到主屏幕。