我刚刚在iPad上发现了一些使用新iOS 6的奇怪行为。我正在测试一个用于离线使用的网络应用。 Web应用程序只不过是一个带缓存清单的静态网站,因此不会使用像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-apps现在被视为本机应用程序,这意味着保存到主屏幕的同一个web-app的每个实例都会获得它自己的“存储沙箱”。因此,数据与移动Safari中保存的数据不同。这意味着如果删除所有移动safari的网站数据,这对保存在主屏幕上的网络应用程序没有影响(在ios6之前它们共享相同的数据)。
我也发现了这个:
iOS 6 breaks GeoLocation in webapps (apple-mobile-web-app-capable)
虽然不是完全相同的主题,但它可能是相关的。显然,使用
将网络应用程序保存到主屏幕<meta content="yes" name="apple-mobile-web-app-capable" />
无法使用地理位置。只有从您的网络应用中删除此元标记时,地理位置才有效。也许这也是缓存问题的解决方法,我无法测试它。但话又说回来:如果保存到主屏幕的网络应用程序更像本机应用程序,可能不再需要cache.manifest?如果我发现更多信息,我会在这里报告。
EDIT2:
好的经过一些测试,没有来自网络和苹果的有用提示,我发现了至少一些东西:当我删除
<meta content="yes" name="apple-mobile-web-app-capable" />
从网站上看,当然一切正常,因为它就像你打开Safari一样,到目前为止我没有问题。所以我的兴趣是让它在没有浏览器chrome的情况下工作。如上所述,缓存仅达到99%,然后我得到超出错误的缓存大小配额。然后我关闭了主屏幕应用程序并再次打开它。现在缓存下载再次开始并完成就好了!没有冻结,没有错误!一切似乎都存储在当地。我今天只能在iPad模拟器上测试它,但我希望我能在以后能够在我们的设备上拿到手来确认这一点。
因此,似乎不会被问到是否要增加缓存大小,而是使缓存大小配额超出错误。也许是因为现在主屏幕应用程序的数据存储处理方式不同,您不必再手动增加缓存大小(这当然是纯粹的推测)。但是,如果是这种情况,则不应该有任何错误。因此,不要被要求增加缓存大小,而是必须打开主屏幕应用程序两次,这是一个非常蹩脚的解决方法btw ......
EDIT3:
我可以在真实设备上确认此行为:保存到主屏幕 - &gt;从主屏幕打开 - &gt;下载为缓存文件 - &gt;缓存大小配额超过最后的错误 - &gt;关闭主屏幕应用程序(按主页按钮) - &gt;重新打开它 - &gt;将被缓存的文件再次下载 - &gt;这次没有错误 - &gt;离线可用离线。
我还在iOS 5的设备上对它进行了测试,并且它在预期的情况下运行正常,没有错误。所以这绝对是iOS 6的问题。
其他人可以确认此行为或错误吗?
EDIT4:
我偶尔有机会在iOS 6.1.3上测试这个 - 不幸的是仍然是相同的行为......
答案 0 :(得分:1)
我发现以下链接很有帮助。它解释说,由于Home Screen应用程序现在像本机应用程序一样存储,因此它们有自己的存储/缓存。
Geolocation在第一次迭代时起作用,但从那时起就无法更新。
iOS 6 Geolocation and Local Data Storage
“主屏幕应用程序中的数据现在像原生应用程序一样存储。每个原生应用程序都有自己的沙箱,用于存储,备份和恢复数据。在iOS 6之前,主屏幕应用程序与运行相同的应用程序共享数据如果用户在浏览器中清除了缓存,则应用程序的主屏幕版本也会丢失其数据。在iOS 6中,主屏幕应用程序的数据会像本机应用程序一样保存到沙箱中。备份和恢复处理数据正确,浏览器中的清除缓存不会影响它们。“