方法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却可以。