【问题标题】:Access Web Storage or IndexedDB from outside the browser in Android从 Android 中的浏览器外部访问 Web Storage 或 IndexedDB
【发布时间】:2014-05-10 22:42:17
【问题描述】:

我想使用 HTML 和 javascript 构建一个基于浏览器的离线应用,以在 Android 平板电脑上收集调查数据。该应用程序将包含一些带有表单的静态页面,供用户输入数据,然后使用 Web Storage 或 IndexedDB 将其存储在本地。但是,我还想构建一个小型原生 Android 应用程序,它可以获取这些数据并将其传输到其他设备。这可能吗,如果可以,我将如何处理?

具体来说,我想了解本机应用程序是否以及如何访问浏览器的数据存储(我可以管理其余部分)。我更喜欢使用 Android 浏览器,但如果这样更容易,我可以使用任何其他浏览器。我发现了这个blog post,这表明它可能是可能的,但我希望能提供一些关于 Android 浏览器存储数据的位置以及其他应用程序访问数据的难易程度的指针。

【问题讨论】:

  • 我不确定您是否可以按照您要求的方式轻松完成此操作,但您可能可以使用这些示例来创建一个应用程序,该应用程序既显示网页又使用普通 android 数据管理数据通过将数据从 js 传递到本机应用程序来存储而不是基于浏览器的数据存储。 stackoverflow.com/questions/6357191/…stackoverflow.com/questions/5264489/…

标签: java android indexeddb android-browser web-storage


【解决方案1】:

很遗憾,我不认为数据流可以按照您想要的方式工作。在 Chromium WebKit 实现中,IDB 将数据存储在您不应访问的 levelDB 文件中(根据设计)。

那么我们如何让 Java 和 JavaScript 很好地结合在一起呢?这是一个很好的问题!在我看来,将 Java 数据转换为 IDB 数据的唯一好方法是通过客户端。

我有很好的 IDB 能力,但我的 Android 体验是非生产的。据我了解,这是一个建议的解决方案:

  • 通过本机应用程序视图收集数据
  • 将字符串写入沙箱中的文件,并将数据存储为 JSON blob 或附加到 JavaScript 全局的 .html <script>
  • 加载可以访问本地 URI(如 file://android_asset/blah.json)的 webview,然后运行一些 IDB 代码将其批量插入 IDB
  • 使用您的 IDB 商店来推动基于 Web 的视图

因此,“本机应用程序是否以及如何访问浏览器的数据存储”的答案将是:尝试相反。构建它以让您的浏览器访问您的本机应用程序数据存储。

【讨论】:

  • 谢谢。我可以看到拥有单独的本机应用程序和离线 Web 应用程序可能无法正常工作,我应该在本机应用程序中使用 webviews。但在那种情况下,为什么要使用 IDB 呢?在原生应用中完成所有数据存储工作不是更好吗?
  • 是的,可能。使用 IDB 只有一个很好的理由,那就是如果您需要在网络上“大规模”索引键值存储。如果您要使用本机,我会使用本机数据存储,例如 sqllite。 (事实上​​,这就是 Firefox 实现 IDB 的方式:在 SQL 之上。)
  • 我正在尝试考虑一个用于 web->native 数据流的选项:您可以让您的客户端代码创建 Java 可以使用的数据 URI。当前的障碍:除非它们共享文件系统,否则您如何将这些 URI 从客户端传递到本机?他们可以通过 FileWriter API 共享 fs 吗?
【解决方案2】:

序列化所有记录并在应用首次运行时加载到应用中的最简单、最可靠的方法。

【讨论】:

  • 感谢您的建议。您的意思是浏览器应用程序会序列化记录,然后用户必须将其保存为文件,然后本机应用程序将访问该文件?
【解决方案3】:

如果您愿意尝试稍微不同的方法,这是可能的:

  1. 从 HTML5 应用程序中提取数据很棘手,但将数据推送到本机应用程序更容易。您的 HTML5 应用程序必须具有原生容器。容器 API 是否包含访问本机 ContentProvider 的方法?如果没有,您可以将自己的本机代码添加到容器中吗?基本上,如果您可以访问 ContentProviders,那么您的本机应用程序只需要实现一个具有插入权限的 ContentProvider(可以仅限于您的 HTML5 应用程序)。插入后,本机应用程序可以对数据执行任何操作,包括将其广播到其他设备。

  2. 1234563 .然后,您将可以通过 WebStorage 类直接访问 WebView 的存储。

【讨论】:

  • 在没有任何研究或文档的情况下建议本机容器似乎没有帮助。这是不可能的,据我所知。如果我错了,我有兴趣查看支持文档,我会改变我的反对意见,但据我所知,Cordova 仅支持 IDB for Windows 和 BlackBerry。其他“容器”不支持 IDB。
  • 我从来没有说过任何关于 IDB 的事情。您将自己的解决方案与我的解决方案混淆了。
猜你喜欢
  • 2014-06-19
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 2019-01-19
  • 1970-01-01
  • 2014-05-14
  • 2023-03-11
  • 2019-05-21
相关资源
最近更新 更多