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

The*_*Gwa 22 cookies safari ios iphone-standalone-web-app ios7

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

有一个cookie测试仪在这里.并在这里讨论.

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

Bru*_*Dev 43

由于iOS 5 Apple在Safari浏览器和现在被认为是沙盒应用程序之间共享数据方面越来越孤立,因此Home Screen书签越来越孤立.

  • iOS <= 5:一切都很酷,本地存储,cookies,工作在主屏幕和网页之间共享.网站和主屏幕之间的过渡是无缝的,网络开发人员很高兴.
  • iOS 6:Apple开始将Home Screen应用程序(包括从Web保存的应用程序)视为沙盒应用程序.显然,显示已保存站点的主屏幕应用程序成为WebView控件,并未嵌入Safari本身.这阻止了本地存储的传输,但您仍然可以共享cookie.
  • iOS <= 6.x:在某个点发布后,Cookies变得有些不可靠,它们仍然是共享的,但在第一次保存时没有被转移.如果您回到该网站并执行了一些操作,那么该主页应用程序可以使用该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永远保存,你也可以在其中保存任何内容.更新页面的唯一方法是,windows.reload如果您没有通过AJAX提取内容,请执行或等效的重定向.简而言之,例如,将您的价值注入隐藏的输入字段,并将其传输.

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

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

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