iOS7 Safari : Saving to Home-screen and persist token

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

对于 iOS 6.[something] 之后的 Cookie、SQLite 数据和全屏 Web 应用程序的 localStorage 数据与 Safari 数据分开存储。我有一个 token ,我需要在保存到主屏幕时保留到主屏幕应用程序。

有一个cookie测试器here .和讨论here .

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

最佳答案

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

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

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

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

  2. 另一个技巧是在 DOM 中“呈现”您想要传递到主屏幕的任何值。由于 iOS 的早期版本,保存到主屏幕时呈现的 HTML 将保持不变。启动主屏幕网络应用程序时,它不会从 URL 请求内容。它只是加载以前保存的 HTML,没有初始 Web 请求(将请求 HTML 中所有指向 CSS 和 JS 的链接,但不会请求页面本身)。知道 HTML 会永久保存,您在其中呈现的任何内容也会永久保存。更新页面的唯一方法是执行 windows.reload 或等效重定向(如果您未通过 AJAX 提取内容)。长话短说,例如,将您的值注入(inject)一个隐藏的输入字段,它将被转移。

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

选项 #2 有点冒险,因为有一天,所有了解 Apple 的人可能会决定实际上应该发出初始页面请求,而不是在保存页面时使用相同的 HTML。然后,这将清除您拥有的数据以及 DOM 中任何元素的当前状态。

更新:DOM 注入(inject)技术也不再有效(iOS 7+),只有直接从服务器下载的 DOM 才会保存到主屏幕。在运行时所做的任何动态更改都将丢失。删除选项 #2,因为问题是针对 iOS 7 的,它的工作时间更长,这让您只有选项 #1,向 URL 添加一些内容,这些内容将始终保存到主屏幕。

关于iOS7 Safari : Saving to Home-screen and persist token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21109615/

相关文章:

javascript - 在 IOS 中进行用户交互之前,Ajax 调用无法正常工作

ios - iOS 9 中的 NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)

ios - Objective c 从响应中获取参数值

ajax - 如何在 wordpress ajax 请求处理程序中设置 cookie?

iOS7 侧边菜单状态栏颜色过渡。如在 iOS7 Facebook 应用程序中

ios - 在 iOS 7 - 7.1.x 上截图

ios - 如何在 iOS 中简化单个复杂的 UIBezierPath 多边形

jsf - 在JSF2.0中,如何在facelets中写出cookies?

java - 失去 spring security 记住我重定向后的子域 cookie

ios - MapKit 沿线标注