IndexedDB在Android原生应用中如何工作

7
我们有一个应用程序来查看特定的材料。在材料类型中,有一个在应用程序内部的WebView小部件显示的HTML5演示文稿。现在我们需要获得关于此视图的详细信息(例如幻灯片播放持续时间,列表元素选取可用位置等)。
这是客户想要的内容-我们不能更改它。
我们决定在HTML5中使用IndexedDB在本地存储信息。现在,存储起来了(就我所知)。下一个问题是如何通过应用程序获取此信息,目前还没有解决。不幸的是,谷歌没有帮助我。
如果我知道路径,如何从IndexedDB文件中获取信息?或者您是否知道从html到原生应用程序传输数据的另一种方法?
附言:编写自定义浏览器可能不是解决方案。
更新
发现了从JS加载文件的解决方案。在Chrome浏览器中,它会自动保存在下载中。在Android应用程序中,我设置了WebView对象DownloadListener来侦听文件保存事件。
捕获保存文件工作完美。但是该URL路径看起来像blob: file / ...,我无法从中获取信息。尝试使用ContentResolver,创建File对象,替换blob:字符串为空,启动ACTION_VIEW意图-没有什么帮助。
更新
尝试使用DownloadManager和DownloadManager.Request-它会抛出以下异常。
java.lang.IllegalArgumentException: Can only download HTTP/HTTPS URIs: file:///fa4857ad-0e86-454a-a341-123729e9ece0

blob:file URI 相同。
3个回答

3

1
您可以通过调用JavaScript函数并以特定模式返回所需属性来通过黑客方式解决该问题。要实现这一点,
  1. Create the javascript function which will return the attributes in specific pattern.
  2. Create the WebChromClient and override onJsAlert() method. message parameter of onJsAlert has the returned string of message. Parse the message string to get the required attributes.
  3. Call the JavaScript function from Java code to get the value.

    final class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            result.confirm();
            // Parse the message to get the required attributes
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
            return true;
       }
    }
    

要调用JavaScript函数以获取数据,请使用以下代码。其中testFunction()是将以字符串格式返回数据的函数。

webView.loadUrl("javascript:alert(testFunction())");

创建WebChromeClient实例并将其设置到webview中,还要记得启用JavaScript。
WebView webView = (WebView)findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new MyWebChromeClient());

0
我们决定在设备上使用ServerSocket作为本地主机的Web服务器。然后Html发送到它的HTTP响应。可能像@Michael2所写的那样使用JavaScript绑定会更好,但是我们的解决方案已经在他发帖之前实现了。:-)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接