【问题标题】:iOS7 Safari: Saving to Home-screen and persist tokeniOS7 Safari:保存到主屏幕并保留令牌
【发布时间】:2014-02-02 06:44:04
【问题描述】:

对于 iOS 6.[something] 及更高版本的全屏 Web 应用程序的 Cookie、SQLite 数据和 localStorage 数据与 Safari 数据分开存储。我有一个令牌,在保存到主屏幕时需要将其保留到主屏幕应用程序。

有一个 cookie 测试员 here。还有一个讨论here

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

【问题讨论】:

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


    【解决方案1】:

    自 iOS 5 以来,Apple 一直在使主屏幕书签在 Safari 浏览器和现在被视为沙盒应用程序之间共享数据方面变得越来越独立。

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

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

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

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

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

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

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

    【讨论】:

    • 你有这方面的(官方)资源吗?也许是一些官方的 Apple 文档、开发者博客或类似的东西?
    • @DrColossos 不,这纯粹是来自过去几年的经验,并且必须针对 v4 以来的每个 iOS 版本调整解决方案。
    • @karlingen 是的,没有理由不这样做。保存到主屏幕时,URL 未修改,因此您的应用程序始终可以使用它。苹果需要对这种技术进行大规模的改变才能失败。他们不应该更改正在保存的内容的 URL,因为这会影响所请求的页面,所以这应该很好。
    • @BrutalDev 这仍然适用于 iOS 12 吗?
    • @geoboy 不确定,已经好几年不用这种技术了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多