使用缓存清单和大量故障排除,我能够可靠地缓存整个应用程序;请注意,这是一个单页应用程序,只有几个单独的文件资源。
作为进一步的增强,我一直在尝试修改基于
window.applicationCache 状态
通知用户有关更新,即:
点击此处应用更新
如果可能的话,我可以交换缓存
window.applicationCache.swapCache();
这将允许我交换更新的缓存,然后重新启动页面以提供简化的更新机制。
可能比苹果商店的应用程序更精简。
我怀疑 applicationCache API 是因为这个原因被 Apple 阻碍了 Web 应用程序。话虽如此,我相信移动设备上对“html5”API 的支持水平是苹果 safari 中最强大的。
以下是我目前注意到的一些问题,不分先后。请注意,这不是一个完整的错误列表。
我从来没有收到“updateready”事件;此警报线永远不会运行:
window.applicationCache.addEventListener('updateready', function(e) {
alert('updateready event status=' + window.applicationCache.status );
}, false);
我无法手动检查更新。以下代码给了我一个例外
try{
window.applicationCache.update();
}catch (err){
alert('exception:\n' + err);
}
似乎只要我开始与缓存状态交互,缓存就会停止工作。这些错误非常难以捉摸。确定和隔离任何一个问题可能会花费大量时间,尤其是因为所有这些代码都可以在其他浏览器(chrome)上完美运行。
现在有一个好消息:我怀疑如果您将应用程序固定到主屏幕,iCloud“备份”资源并在您第一次从主屏幕运行应用程序后恢复它们。为避免此问题,您有时可能必须重命名文件。我已经证明苹果通过以下方式对过时的组件进行离散备份
从我的应用服务器中完全删除它们
从主屏幕删除固定的网络应用程序
清除所有缓存
在 safari 中打开应用程序 url
验证其是否为最新版本
钉在家里
验证固定的应用程序是否为最新版本
关闭它
再次运行 - 它回到旧的,不再在您的服务器上。
最后,如果您在手机处于飞行模式时运行固定的应用程序,iCloud 将无法恢复过时的文件。这证明它来自空中。