【问题标题】:How to stop the HTML 5 database from being deleted in iOS 5.1如何在 iOS 5.1 中阻止 HTML 5 数据库被删除
【发布时间】:2012-04-03 12:34:23
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: web-sql ios5.1


    【解决方案1】:

    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 将创建指向错误/不安全位置的首选项)

    【讨论】:

    • 我想你可能错过了我说我正在使用纯 HTML/JS 应用程序的地方; IE。一个网站,在 Safari 中查看..然后添加到主屏幕(通过“添加到主屏幕”按钮),使其成为全屏“应用程序”。所以就我而言,没有应用程序的 init() 方法或 WebView。
    • 啊,对不起。从问题中不清楚。也许你应该提到它是一个网络应用程序而不是一个应用程序。
    • 好点...感谢 EionRobb。我已将其更新为“webapp”而不是“app”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多