iOS6 Web应用程序的最大缓存大小是多少?如何扩展它?

Jul*_*les 6 html5 cache-manifest html5-appcache ios6

我正在构建一个专门针对iPad(运行iOS 6+)的Web应用程序,显示公司的产品系列.

使用HTML5的"cache.manifest"文件完美地完成了这一切.但由于缓存已增长到大约50MB,因此iPad不再保存应用程序数据.根据Safari设置,缓存大小现在为0.1KB,而不是50MB.

那么,对于Web应用程序,Safari的缓存的实际限制是什么?是否有办法扩大应用程序缓存的最大数量?

mdd*_*ddw 12

编辑2014年6月2日:iOS7.1上的最大缓存大小为300Mb.

一位客户最近问我这个确切的问题,所以我进行了调查.

根据IOS6(我的所有测试都在iOS6.1完成),这些是两个不同的东西:

  • 使用.manifest的网站,可通过移动Safari访问
  • 主屏幕上的webapp,从网站创建

具有.manifest的网站可以使用最多50mb的缓存,并且会询问用户权限.它不能使用更多.可以在settings/safari/advanced中找到并清除此值.如果您尝试在缓存中填充更多内容,error则会触发一个事件,并且该内容window.applicationCache.status将变为IDLE.

webapp与其网站不共享相同的缓存.清除缓存设置/ safari/advanced将不会为您的主屏幕webapp做任何事情.它将接受超过50mb的缓存而无需用户输入,但我不确切知道多少(我用60mb测试成功,完全可以离线访问.*编辑:尝试用83mb,成功)我不知道这个数据在哪里可以在iOS设置中看到.我猜不通.

测试这是***的痛苦,直到我找到规格.有一个API在iOS6上完美运行.
您应该检查window.applicationCache.status,它会告诉您应用程序状态是什么,以及以下事件(从我的代码剪切和粘贴,以及他们的监听器):

window.applicationCache.addEventListener('checking', onChecking);
window.applicationCache.addEventListener('noupdate', onNoupdate);
window.applicationCache.addEventListener('downloading', onDownloading);
window.applicationCache.addEventListener('progress', onProgress);
window.applicationCache.addEventListener('cached', onCached);
window.applicationCache.addEventListener('updateready', onUpdateready);    
window.applicationCache.addEventListener('obsolete', onObsolete);
window.applicationCache.addEventListener('error', onError);
Run Code Online (Sandbox Code Playgroud)

所有人都在使用iOS 6.1,甚至是progress带有event.loaded和的事件event.total

webapp通过检查开始,然后noupdate在.manifest相同的情况下触发.现状是IDLE.

如果.manifest已更改,状态为DOWNLOADING,则progress清单中的每个文件都会触发事件,然后状态为UPDATEREADYupdateready触发.

如果您处于离线状态,则会error触发事件并且状态为IDLE.

您可以使用测试在线/离线状态

var online = navigator.onLine ? 'online' : 'offline';
Run Code Online (Sandbox Code Playgroud)

它有效,但规格说这是不可靠的.

还有三件事要完成:

  • 我的清单名为cache.manifest,并按此声明 <html manifest="cache.manifest">
  • 我的.htaccess有AddType text/cache-manifest manifestExpiresByType text/cache-manifest "access plus 0 seconds"
  • 我的应用程序了 <meta name="apple-mobile-web-app-capable" content="yes">

有了这个API,就可以更容易地理解幕后发生了什么.一定要做自己的测试,我不是100%肯定这个结果,或者他们可以使用新的iOS版本.我将进一步测试最大尺寸.