移动Safari应用程序缓存错误?

时间:2010-06-15 13:41:56

标签: caching manifest ipod-touch mobile-safari offline

我正在使用Mobile Safari的缓存清单文件来存储在离线模式下在iPod Touch(版本3.1.3)上运行的多页数据输入应用程序。应用程序通过persistence.js ORM写入客户端数据库。一切正常。

然而,我遇到偶尔的,极难再现的问题,Safari似乎忘记了页面被缓存。发生这种情况时,会出现“无法打开页面”警报,这与您尝试在关闭wi-fi时访问非缓存网站时出现的警报相同。我发现修复此问题的唯一方法是重新连接到无线信号并在线访问该站点,这似乎可以直接设置缓存。当你在办公室时,这很容易做到,但在现场做起来却不那么容易。

我没有尝试引用缓存资源之外的任何内容,并且我已经验证了应用程序是通过在断开连接时运行整个站点来缓存的,有时成功连续几天。我觉得操作系统中存在一个与缓存有效性混淆的错误。我不一定在寻找问题的解决方案(但那会很好),而只是确认其他人遇到了这个问题。

1 个答案:

答案 0 :(得分:2)

使用缓存清单和大量故障排除,我能够可靠地缓存整个应用程序;请注意,这是一个单页应用程序,只有几个单独的文件资源。

作为进一步的增强,我一直在尝试基于

修改DOM
  

window.applicationCache status

告知用户更新,即:

  

点按此处以应用更新

如果可以,我可以交换缓存

  

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中打开应用网址

验证其最新版本

寄回家

验证固定应用是否为最新版本

关闭它

再次运行 - 再回到旧版本,不再在您的服务器上。

最后,如果您在手机处于飞行模式时运行固定应用,iCloud将无法恢复过时的文件。这证明它来自无线电。