cache.manifest/offline使用网络应用程序的奇怪行为保存到ipad ios6的主屏幕上



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

该应用程序以前运行良好:我可以将网站保存到主屏幕。当我从那里打开它时,所有的数据都会被下载以进行缓存。下载结束时,弹出窗口会问我是否想将缓存增加到50MB——可以接受——一切都很好——离线使用有效。

现在更新到iOS 6之后:我对应用程序做了一些更改。已从主屏幕卸载应用程序。在移动狩猎中再次打开它。已保存到主屏幕。打开后,下载按预期开始。但随后它冻结在99%。当我在控制台中查找它时,我会得到错误消息:应用程序缓存更新失败,因为超出了大小配额。

奇怪的是:当我在浏览器中打开它时,下载开始了,最后我被问到是否要将缓存大小增加到50MB。我当然确认。当我现在查看safari在"网站数据"上的偏好时,我发现这个应用程序的所有缓存数据大约为33MB!!所以根本不超过50MB!

这是iOS6的一个错误吗?自iOS 6更新以来,有人在将网站保存到主屏幕时遇到过缓存数据的问题吗?谢谢你的帮助,因为我真的被困在这里了。。。在网上找不到任何有用的东西。。。

(不幸的是,我无法发布任何指向网络应用程序和/或其文件的链接)。

编辑:

我发现了更多关于这个问题的信息:

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

显然,保存到主屏幕的wep应用程序现在被视为本地应用程序,这意味着保存到主屏的同一web应用程序的每个实例都有自己的"存储沙盒"。因此,这些数据与保存在移动Safari中的数据是独立的。这意味着,如果你删除了移动safari的所有网站数据,这对保存到主屏幕的网络应用程序没有影响(在ios6之前,他们共享相同的数据)。

我还发现了这个:

iOS 6打破了网络应用程序中的GeoLocation(支持苹果移动网络应用程序)

虽然不是完全相同的主题,但它可能是相关的。显然,使用将web应用程序保存到主屏幕

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

无法使用地理位置。只有当您从web应用程序中删除此元标记时,地理位置才有效。也许这也是解决缓存问题的方法,我还不能测试它。但话说回来:如果保存到主屏幕的网络应用程序被视为更像本地应用程序,那么可能不再需要cache.manifest了?如果我发现更多,我会在这里汇报。

第2版:

好吧,经过一些测试,无论是网络还是苹果都没有有用的提示,我至少发现了一些东西:当我删除时

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

从网站上看,一切都很好,因为这就像你打开Safari一样,到目前为止我没有遇到任何问题。所以我的兴趣是让它在没有浏览器chrome的情况下工作。如上所述,缓存只达到99%,然后我得到了缓存大小配额超过错误。然后我关闭了主屏幕应用程序,然后再次打开它。现在缓存下载又开始了,完成得很好!没有冻结,没有错误!所有东西似乎都存储在本地。我今天只能在iPad模拟器上测试它,但我希望我能在稍后拿到我们的设备后尽快确认这一点。

因此,似乎没有被问到是否要增加缓存大小,而是出现了缓存大小配额超过错误。也许是因为现在主屏幕应用程序的数据存储处理方式不同,你不必再手动增加缓存大小了(当然这纯粹是猜测)。尽管如此,如果是这样的话,应该不会有任何错误。因此,与其被要求增加缓存大小,你必须打开主屏幕应用程序两次,这是一个相当蹩脚的解决方法,顺便说一句…

第3版:

我可以在真实的设备上确认这种行为:保存到主屏幕->从主屏幕打开->下载要缓存的文件->缓存大小配额在最后超过错误->关闭主屏幕应用程序(按下主按钮)->再次打开它->再次下载要缓存文件->这一次没有错误->所有离线可用的东西。

我还在iOS 5的设备上测试了它,在那里它像预期的那样工作,没有错误。所以这绝对是iOS 6的问题。

其他人能证实这种行为或错误吗?

第4版:

我偶尔有机会在iOS 6.1.3上测试一下——不幸的是,仍然是同样的行为。。。

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

地理定位在第一次迭代中有效,但从那时起无法更新。

iOS 6地理定位和本地数据存储

"主屏幕应用程序中的数据现在像本地应用程序一样存储。每个本地应用程序都有自己的沙盒,用于存储、备份和恢复数据。在iOS 6之前,主屏幕应用与浏览器中运行的同一应用程序共享数据。如果用户清除浏览器中的缓存,主屏幕版本的应用程序也会丢失数据。在iOS6中,主屏幕的应用程序的数据会保存到就像原生应用程序一样的沙盒。备份和恢复可以正确处理数据,清除浏览器中的缓存不会影响它们。">

最新更新