【问题标题】:How to stop the HTML 5 database from being deleted, when using Phonegap and iOS 5.1使用 Phonegap 和 iOS 5.1 时如何阻止 HTML 5 数据库被删除
【发布时间】:2012-03-12 14:27:21
【问题描述】:

我正在使用 phonegap 为 iOS 创建一个测验风格的应用程序。该应用程序允许用户创建然后参加测验。

目前我正在使用一个 HTML 5 数据库,该数据库使用 phonegap API 来存储测试和结果数据。我担心当设备存储空间已满时,iOS 5.1 现在可以删除数据库。

是否有标记存储数据库的 webkit 缓存文件夹,使其永远不会被删除?如果这是不可能的,是否有任何建议以另一种方式来存储始终持久的数据。

【问题讨论】:

    标签: ios iphone database cordova


    【解决方案1】:

    是的,可惜苹果在 iOS5.1 中这样做了

    可以通过调用私有 API 来更改 WebKit 数据的位置。您应该能够将位置设置为像 Documents 这样的安全文件夹。我还没有测试这个解决方案,但是看看这个帖子:How do I enable Local Storage in my WebKit-based application?

    Phonegap 团队也在解决这个问题:https://issues.apache.org/jira/browse/CB-330

    另一种方法是使用带有 phonegap 插件的 SQLite(与 WebSQL 相同)。该插件将数据库保存在 Document 文件夹中,这意味着数据库没有被删除,而是由 iCloud 保存。

    这里是原生 SQLite phonegap 插件:https://github.com/davibe/Phonegap-SQLitePlugin 关于这个插件,在某些情况下它比 WebSQL 慢一点,而且 WebSQL API 之间也有一些差异,但这里有一个适配器: https://gist.github.com/2009518

    您还应该将旧的 WebSQL db 文件(存储在 Library/WebKit 或 Caches 目录中)迁移到 Document 文件夹。这是执行此操作的代码: https://gist.github.com/2009491

    如果数据很重要,您应该将其保存到服务器。我写了一个小库来将 SQlite DB 同步到服务器: https://github.com/orbitaloop/WebSqlSync

    【讨论】:

    • 非常感谢您提供如此完整的答案!使用 Native SQLite 将解决我的问题,而无需对代码进行重大修改。
    • 我现在开始实现这一点,但在使用适配器时遇到了一些问题。我有使用 HTML5 数据库的应用程序设置,您能否指出我需要进行的更改和/或如何使用适配器。
    • @nicktones:可以调用适配器中定义的函数,而不是调用 tx.executeSql。但我必须警告你,SQLite 插件有一些错误,而且它比 WebSQL 慢。 phonegap 团队已经找到了避免该问题的解决方案:issues.apache.org/jira/browse/CB-330
    【解决方案2】:

    Webkit 存储和 iOS 5.1 的两个问题都得到了修复

    1. 存储从 /Webkit 移动到 /Cache
    2. 在 iOS 5.1 下的应用更新(WebKit 错误)时,存储未调整为更新的文件夹结构

    https://issues.apache.org/jira/browse/CB-330

    这个解决方案似乎比仅仅更改调用私有 API 的 Webkit 数据的位置更安全。当应用程序运行时,将使用 Webkit 存储位置。在恢复或终止时,所有数据都会备份到文档文件夹中。时间戳确保 ab 旧备份不会覆盖较新的存储数据(如果应用崩溃...)。

    最好的:使用旧版 iOS 版本的用户使用带有该修复程序的应用程序,不会因任何 iOS 更新而遭受损失。这就是为什么人们不应该等待......

    【讨论】:

    • 谢谢。已使用 PhoneGap 1.6 迁移到此解决方案
    • PhoneGap 1.6 是否内置了此修复程序?
    【解决方案3】:

    我不会使用 html5 数据库,而是通过 ajax(在远程服务器上,使用 php 和 mysql)发送/接收数据,最好是加密的(和 base64_encoded)。

    【讨论】:

    • 您好,谢谢,但我需要该应用程序能够完全离线运行。
    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2021-04-03
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多