4

这基本上与这个问题相同,只是我没有使用 PhoneGap(所以我认为那里提供的任何解决方案都不适用)。

我有一个可以离线工作的纯 HTML/JS webapp(使用 WebSQL 进行存储,使用 AppCache 进行离线使用)。

该应用程序有一个“导出”选项,可将数据序列化为 JSON 并将其上传到 AWS S3 存储桶进行备份;以及用于恢复的相应“导入”选项。但是,由于这是整个数据库的完整转储/恢复,因此该过程并不是那么快,因此通常我每周备份一次。

正如预期的那样,从 iOS 5 到5.1 的 OTA 升级删除了我的本地 webSQL 数据库,但我能够成功地从 S3 恢复数据(幸运的是,我刚刚在升级前做了备份)。

不幸的是,在运行 iOS 5.1 几周后,它再次决定需要空间,并删除了我的 webSQL db。再次,我很幸运,这发生在我每周定期备份之后;但我担心如果这种情况经常发生(iOS 删除这个“临时”数据库以回收空间),不久之后我就会因为几天没有备份而陷入困境。

我计划最终摆脱现在已经失效的 WebSQL,并使用 IndexedDB;但当然iOS 还不支持 IndexedDB。我还计划修改我的应用程序中的导出/导入过程,这样它就不会进行完全转储/恢复,而是将所有更改的记录与 S3 同步(这样备份到 S3 的麻烦就更少了,因此很可能比每周更频繁)。

同时,是否有任何黑客/解决方法/技巧来确保 iOS 5.1 不会清除 WebSQL 数据库;或者有什么方法可以预测何时可能发生清理,以便我可以尝试通过运行导出来备份我的数据来抢占它?

4

1 回答 1

0

PhoneGap 社区提供的解决方案绝对适用。对我们来说,https://issues.apache.org/jira/browse/CB-330?focusedCommentId=13237796&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13237796 的代码效果最好对我们来说,只要在初始化任何 WebView 之前调用它(即在您的应用程序的 init() 方法中)以及在初始化 WebView 之后调用它。

上面链接的代码将数据库移动到安全位置,并编辑 WebKit 首选项以引用新位置。它需要运行两次,以便在加载 WebKit 之前移动和更新现有数据库,并在加载 WebKit 后更新到新位置(因为 WebKit 将创建指向错误/不安全位置的首选项)

于 2012-04-13T01:37:39.707 回答