【问题标题】:Can I open an HTML5 client-side database via an iPhone App (objective-C)?我可以通过 iPhone 应用程序(objective-C)打开 HTML5 客户端数据库吗?
【发布时间】:2013-10-30 03:52:18
【问题描述】:

我在常规的 Objective-C iPhone 应用程序中使用 UIWebView。 UIWebView 中显示的网页正在通过 javascript 写入 HTML5 客户端 SQL 数据库。我想打开这个数据库以从 iPhone 应用程序中读取和写入。这可能吗?如果是,我如何找到数据库,我可以使用 SQLite 框架打开它们吗?

【问题讨论】:

    标签: iphone sqlite html uiwebview client-side


    【解决方案1】:

    我认为它不会以这种方式暴露出来。

    首先,我认为UIWebViews 不会有一个跨多个会话持续存在的客户端数据库(尽管可能,但我没有测试过)。其次,它当然不会让您直接访问 SQLite 数据库文件本身。

    你最好的选择是调用 javascript 到 webview 中

    [webView stringByEvaluatingJavascriptFromString:@"mySqlQueryingFunction()"]
    

    让 javascript 为您访问数据库。

    【讨论】:

    • 由于这是该主题中投票最多的答案,因此我必须通知其他阅读此内容的用户。这两个假设都是错误的(客户端本地存储仍然存在,您可以访问 sqlite 文件)。请参阅stackoverflow.com/questions/9067249/… 了解更多信息。
    【解决方案2】:

    UIWebView 的 WebKit 实例使用的 SQLite 数据库实际上在<Application_Home>/Library/WebKit/LocalStorage/file__0/ 中,例如0000000000000001.db.

    【讨论】:

      【解决方案3】:

      HTML5 数据库位于您应用的沙箱之外,无法直接访问。如果您可以控制 UIWebView 中显示的网页,则可以构建一个相对简单的 javascript 桥来获取内容并将它们插入到您自己的 SQLite DB 中。

      【讨论】:

      • 谢谢柯克和斯奎吉。我肯定会使用 Javascript 桥接器,我想我可以通过使用键值存储(localStorage 对象)来简化事情。
      • 我不知道这是否是真的,但现在不是。请参阅下面的答案,数据库名称为 00000000000000001.db。我正在使用这种技术,以便 javascript 和 obj-c 可以读取/写入同一个 sqlite3 数据库并且它可以工作。
      【解决方案4】:

      老问题,但我在谷歌上搜索该主题时发现了这个问题,并认为我会用解决方案对其进行更新。

      localstorage 数据库是 sqlite 数据库,存储在 /Library/WebKit/LocalStorage 中,您的应用程序的数据库类似于 file__0.localstorage

      您可以通过以下方式获取文件的路径:

      NSString* fullPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/WebKit/LocalStorage/file__0.localstorage"];

      希望这对正在研究此问题的其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-06-28
        • 2010-11-02
        • 2023-03-16
        • 2015-02-22
        • 1970-01-01
        • 2011-09-13
        • 2011-06-02
        • 1970-01-01
        • 2020-07-11
        相关资源
        最近更新 更多