我正在使用Mobile Safari的缓存清单文件来存储在离线模式下在iPod Touch(版本3.1.3)上运行的多页数据输入应用程序.应用程序通过
persistence.js ORM写入客户端数据库.一切正常.
但是,我遇到偶尔的,非常难以重现的问题,Safari似乎忘记了页面被缓存.发生这种情况时,会出现“无法打开页面”警报,这与您尝试在关闭wi-fi时访问非缓存网站时出现的警报相同.我发现修复此问题的唯一方法是重新连接到无线信号并在线访问该站点,这似乎可以直接设置缓存.当你在办公室时这很容易做到,但在现场做起来却不那么容易.
我不是要尝试引用缓存资源之外的任何内容,并且我已经验证了应用程序是通过在断开连接时运行整个站点来缓存的,有时候会成功连续几天.我觉得操作系统中存在一个与缓存有效性混淆的错误.我不一定在寻找问题的解决方案(但那会很好),而只是确认其他人遇到过这个问题.
最佳答案 使用缓存清单和大量故障排除,我能够可靠地缓存整个应用程序;请注意,这是一个单页应用程序,只有几个单独的文件资源.
作为进一步的增强,我一直在尝试修改DOM
window.applicationCache status
通知用户有关更新,即:
tap here to apply update
如果可以,我可以交换缓存
window.applicationCache.swapCache();
这将允许我交换更新的缓存,然后重新启动页面以提供简化的更新机制.
可能比苹果商店的应用程序更精简.
我怀疑Apple出于这个原因,appCache API因为阻碍了网页应用而受到了阻碍.话虽如此,我相信在移动设备上支持“html5”API的程度是苹果游戏中最强大的.
以下是我到目前为止注意到的一些问题,没有特别的顺序.请注意,这不是一个完整的错误列表.
我从来没有得到’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);
}
似乎只要我开始与缓存状态进行交互,缓存就会停止工作.这些错误是极其难以捉摸的;钉住& amp;隔离任何一个问题可能需要花费很多时间,特别是因为所有这些代码在其他浏览器(chrome)上运行完美.
现在这里是一个很好的:
我怀疑,如果你将应用程序固定到主屏幕,iCloud会“备份”资源并在首次从主屏幕运行应用程序后恢复它们.为避免此问题,您有时可能必须重命名文件.我已经证明,苹果可以对过时的组件进行离散备份
从我的应用服务器中完全删除它们
从主屏幕删除固定的网络应用程序
清除所有缓存
在safari中打开应用程序URL
验证它是最新版本
别回家
验证固定的应用程序是最新版本
关闭它
再次运行 – 它回到旧的,不再在您的服务器上.
最后,如果您在手机处于飞行模式时运行固定应用程序,iCloud将无法恢复过时的文件.这证明它来自无线电.