ipad - cache.manifest/离线使用Web应用程序的异常行为已保存到ipad ios6的主屏幕上

标签 ipad web-applications ios6 offline-caching cache-manifest

我刚刚在使用新的iOS 6的iPad上发现了一些奇怪的行为。我正在测试一个Web应用程序的离线使用情况。该Web应用程序不过是带有缓存清单的静态网站,因此不使用sencha touch之类的特殊框架或phnoegap之类的工具。只是HTML,CSS和JavaScript以及cache.manifest。

该应用之前运行良好:我可以将网站保存到主屏幕。当我从那里打开它时,所有数据都将下载以进行缓存。下载结束时,弹出窗口会询问我是否要将缓存增加到50MB(已接受-一切都很好-脱机使用有效)。

现在,在更新到iOS 6之后:
我对该应用做了一些更改。从主屏幕上卸载该应用。在移动浏览器中再次将其打开。保存到主屏幕。打开后,下载将按预期开始。但随后冻结为99%。在控制台中查询时,出现错误消息:
“应用程序缓存更新失败,因为超出了大小配额。”

奇怪的是:当我在浏览器中打开它时,开始下载,最后我被询问是否要将缓存大小增加到50MB。我当然会确认。现在,当我在“网站数据”中查看Safari浏览器的偏好设置时,发现该应用程序的所有缓存数据约为33MB!因此,不要超过50MB!

这是iOS6的错误吗?自从iOS 6更新以来,将网站保存到主屏幕时,有人在缓存数据时遇到任何问题吗?谢谢您的帮助,因为我真的很困在这里...在网络上找不到任何有用的信息...

(很遗憾,我无法发布任何指向Web应用程序和/或其文件的链接)。

编辑:

我发现了有关此问题的更多信息:

http://www.nsbasic.com/blog/?p=928

显然,保存到主屏幕的wep应用程序现在像本机应用程序一样对待,这意味着保存到主屏幕的同一个Web应用程序的每个实例都拥有自己的“存储沙箱”。因此,数据与移动Safari中保存的数据无关。这意味着,如果您删除了移动Safari的所有网站数据,这对保存到主屏幕的Web应用程序没有任何影响(在ios6之前,他们共享相同的数据)。

我也发现了这一点:

iOS 6 breaks GeoLocation in webapps (apple-mobile-web-app-capable)

尽管主题不完全相同,但可能是相关的。显然,使用以下方式将网络应用保存到了主屏幕

<meta content="yes" name="apple-mobile-web-app-capable" />


将无法使用地理位置。仅当您从Web应用程序中删除此元标记时,地理位置才起作用。也许这也是解决缓存问题的一种方法,我还无法测试。但是再说一遍:如果将保存到主屏幕的Web应用程序视为本地应用程序,也许不再需要cache.manifest?如果我发现更多信息,我将在这里报告。

编辑2:

经过一番测试之后,还没有从网络和苹果那里获得有用的提示,我至少发现了一些东西:

<meta content="yes" name="apple-mobile-web-app-capable" />


从该站点上的所有程序当然都能正常运行,因为就像打开Safari一样,到目前为止,我还没有遇到任何问题。因此,我的兴趣是使它在没有浏览器镶边的情况下也能正常工作。如上所述,缓存仅达到99%,然后我得到了超过错误的缓存大小配额。然后,我只是关闭了主屏幕应用程序,然后再次打开了它。现在,缓存下载再次开始,并且可以正常完成!没有冻结,没有错误!一切似乎都存储在本地。我今天只能在iPad模拟器上对其进行测试,但我希望我以后能尽快使用该设备时确认一下。

因此,似乎没有被问到是否要增加缓存大小,而是得到了超过错误的缓存大小配额。也许因为现在用于主屏幕应用程序的数据存储的处理方式有所不同,所以您不必再手动增加缓存大小了(当然,这纯粹是推测)。但是,如果是这种情况,则不应有任何错误。因此,不必要求增加缓存大小,您必须打开两次主屏幕应用程序,这是一个相当la脚的解决方法……

编辑3:

我只是可以在真实设备上确认此行为:保存到主屏幕->从主屏幕打开->下载要缓存的文件->缓存大小配额最终超出错误->关闭主屏幕应用程序(按主屏幕按钮)- >再次重新打开->要缓存的文件再次下载->这次没有错误->一切都可以离线使用。

我还在装有iOS 5的设备上对其进行了测试,并且该设备可以像预期的那样正常运行而没有错误。因此,这绝对是iOS 6问题。

其他人可以确认这种行为或错误吗?

编辑4:

我偶尔有机会在iOS 6.1.3上进行测试–不幸的是,还是一样的行为...

最佳答案

我发现以下链接很有帮助。它解释说,由于主屏幕应用程序现在像本机应用程序一样存储,因此它们具有自己的存储/缓存。

地理位置在第一次迭代中有效,但此后无法更新。

iOS 6 Geolocation and Local Data Storage


“主屏幕应用程序中的数据现在像本机应用程序一样存储。每个本机应用程序都有自己的沙箱,数据将在其中存储,备份和还原到其中。在iOS 6之前,主屏应用程序与浏览器中运行的同一应用程序共享数据如果用户清除了浏览器中的缓存,则该应用程序的主屏幕版本也将丢失其数据。在iOS 6中,主屏幕应用程序的数据会像本机应用程序一样保存到沙箱中。备份和还原可以正确处理数据,并且清除浏览器中的缓存不会影响它们。”

关于ipad - cache.manifest/离线使用Web应用程序的异常行为已保存到ipad ios6的主屏幕上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12625297/

相关文章:

iphone - 大数据的导入、展示和缓存

ios - Objective C语法理解

google-apps-script - Google Apps 脚本可以处理 GET 查询字符串并发布到 Google 表格吗?

java - 手动触发的 Azure Webjob 被多次触发。返回 409(冲突)错误

objective-c - UIWebView 向下滚动输入焦点仅限 iOS 6

ios - 仅更改默认 backBarButtonItem 的位置

iOS6 - 如何清除主屏幕/独立 Web 应用程序的缓存?

iphone - 如何以编程方式获取iphone的IP地址

ios - NKAssetDownload 完成后 NKIssue 状态未更新

iphone - iOS : Cancel a Void function