我们已经申请查看某些特定材料。在材质类型中,HTML5
演示文稿显示在应用内的WebView
小部件中。现在我们需要获得有关此视图的详细信息(例如幻灯片放映持续时间,列表元素选择可用的位置等)。
这是客户想要的 - 我们无法改变它。
我们决定在IndexedDB
内使用HTML5
在本地存储信息。现在存储作品(据我所知:)
)。接下来的问题是通过应用程序获取此信息,但尚未解决。不幸的是,谷歌并没有帮助我。
如果我知道其路径,如何从IndexedDB
文件获取信息?或者您是否知道将数据从html传输到本机应用程序的另一种方式?
P.S。编写自定义浏览器无法解决问题。
更新
找到从JS加载文件的解决方案。在Chrome浏览器中,它会自动保存下载内容。在Android应用程序中,我设置为WebView
对象DownloadListener
来监听文件保存事件。
捕获保存文件非常有效。但是网址路径看起来像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相同。
答案 0 :(得分:1)
是否需要使用IndexedDB进行通信?
如果没有,您可以添加一个javascript界面。只需将数据作为JSON字符串传递,然后在java端解码它。
https://developer.android.com/guide/webapps/webview.html#BindingJavaScript
注意安全(不允许用户浏览不同的页面,清理传入的数据,......); - )
答案 1 :(得分:1)
您可以通过从Java调用JavaScript函数并以特定模式返回所需属性来解决问题。实现这个
从Java代码调用JavaScript函数以获取值。
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());
答案 2 :(得分:0)
我们决定将ServerSocket
用于localhost作为设备上的Web服务器。然后Html
向其发送http响应。可能正在使用java脚本绑定,因为写的@Michael2会更好,但我们的解决方案是在他的帖子之前实现的。 : - )