我正在为 iPad(运行 iOS 6+)构建一个 web 应用程序,显示公司的产品集合。
这一切都使用 HTML5 的“cache.manifest”文件完美运行。但由于缓存已增长到大约 50MB,iPad 不再保存应用程序数据。根据 Safari 设置,缓存大小现在是 0.1KB,而不是 50MB。
那么 Safari 对 Web 应用程序缓存的实际限制是多少?有没有办法扩大应用程序缓存的最大数量?
我正在为 iPad(运行 iOS 6+)构建一个 web 应用程序,显示公司的产品集合。
这一切都使用 HTML5 的“cache.manifest”文件完美运行。但由于缓存已增长到大约 50MB,iPad 不再保存应用程序数据。根据 Safari 设置,缓存大小现在是 0.1KB,而不是 50MB。
那么 Safari 对 Web 应用程序缓存的实际限制是多少?有没有办法扩大应用程序缓存的最大数量?
2014 年 6 月 2 日编辑:iOS7.1 上的最大缓存大小为 300Mb。
最近一个客户问了我这个确切的问题,所以我进行了调查。
根据 IOS6(我所有的测试都在iOS6.1上完成),这是两件不同的事情:
带有 .manifest 的网站可以使用最多 50mb 的缓存,但需要用户许可。它不能使用更多。这个值可以在settings/safari/advanced中找到并清除。如果您尝试在缓存中填充更多内容,error
则会触发一个事件并且该事件将变为window.applicationCache.status
空闲状态。
webapp 与其网站不共享相同的缓存。清除缓存设置/safari/advanced 不会为您的主屏幕 webapp 做任何事情。它会在没有用户输入的情况下接受超过 50mb 的缓存,但我不知道具体有多少(我用 60mb 测试成功,完全可以离线访问。*编辑:用 83mb 尝试,成功)我不知道这些数据在哪里可以在 iOS 设置中看到。估计无处可去。
在我找到规范之前,测试这是一个痛苦的 *** 。有一个在 iOS6 上完美运行的 API。
您应该检查一下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);
所有人都在 iOS 6.1 上工作,即使progress
是event.loaded
和event.total
Web 应用程序首先检查,然后noupdate
在 .manifest 相同时触发。状态为IDLE
。
如果 .manifest 更改,状态为DOWNLOADING
,progress
则为清单中的每个文件触发事件,然后状态为UPDATEREADY
并updateready
触发。
如果您处于离线状态,则会触发一个error
事件并且状态为IDLE
。
您可以使用以下命令测试在线/离线状态
var online = navigator.onLine ? 'online' : 'offline';
它有效,但规格说它不可靠。
还有三件事要完成:
<html manifest="cache.manifest">
AddType text/cache-manifest manifest
和ExpiresByType text/cache-manifest "access plus 0 seconds"
<meta name="apple-mobile-web-app-capable" content="yes">
使用此 API,可以更轻松地了解幕后发生的事情。不过一定要自己做测试,我不能 100% 确定这个结果,或者他们可以使用新的 iOS 版本。我将进一步测试最大尺寸。