美文网首页
android -webview获取网页中标签的值

android -webview获取网页中标签的值

作者: 大丸蛇 | 来源:发表于2019-06-28 14:02 被阅读0次

方法1

1.初始化webview相关设置

 mWebView =  findViewById(R.id.webview);
// 开启JavaScript支持
 mWebView.getSettings().setJavaScriptEnabled(true);

2.添加一个js接口用于回调获得的内容

//在java代码中添加一个js接口用于回掉内容
//@JavascriptInterface注释是必须的
 mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "java_obj");

 public final class InJavaScriptLocalObj
    {
        @JavascriptInterface
        public void showDescription(String str) {
        }
    }

3.执行js代码获取值

//加载网页
mWebView.loadUrl("http://XXXXXXXXX");
//执行js代码
//此部分代码要在网页加载结束后执行
mWebView.loadUrl("javascript:window.java_obj.showDescription("
                        + "document.querySelector('input[name=\"xxxxxxx\"]').getAttribute('value')"
                        + ");");
缺点Android 4.2以下的情况会有安全问题。当前网页可以访问到手机内部的文件。

方法2

不在使用loadUrl()方法,也无需添加js接口回调。而是执行下列方法。
//new ValueCallback<String> 中的范型只可以传 String型 也就是说只能回调String当作数据
mWebView.evaluateJavascript("document.querySelector('input[name=\"XXXXXX\"]').getAttribute('value');"
, new ValueCallback<String>() {
                  @Override
                  public void onReceiveValue(String value) {

                  }
              });
这是由谷歌提供的标准的方法,更加安全。缺点是在部分手机上兼容性的不好,而且是在Android 4.4 后才可使用。

总结:获取网页标签中的值,实际是通过webview注入js的方法获取到当前网页的值,通俗点说就是在网页上执行了这样一段js代码获取到了结果。这需要我们对js和html的语言有一定的理解才会获得自己想要的接口。
比如说同样是获取标签中的value document.getElementById('XXXX');获取不到网页内置js文件里的内容,而document.querySelector却可以。

相关文章

网友评论

      本文标题:android -webview获取网页中标签的值

      本文链接:https://www.haomeiwen.com/subject/ykqscctx.html