这篇文章主要为大家详细介绍了Android WebView控件捕获用户输入的信息,感兴趣的小伙伴们可以参考一下
WebView可所谓是Android中最强大的控件之一,无所不能。
于是有这么一个需求,用户在app之中内嵌的WebView中输入帐号密码的时候,App需要捕获已经输入的帐号密码。
当用户输入帐号密码,一般情况下会进行页面转跳,在页面转跳之前执行js脚本,通过js脚本来获取这个帐号密码的value值。要先获取各个元素的class值,需要解析整个html页面,那么我们可以重写 onLoadResource 这个方法,代码如下:
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
@Override
public void onLoadResource(WebView view, String url) {
getHtml();
Log.e("log-->", "onLoadResource-->>" + url);
}
@Override
public void onPageFinished(WebView view, String url) {
}
});
上面这个方法在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。那么我们可以在这个方法里面执行注入的js脚本
先执行addJavascriptInterface方法,将一个java对象绑定到一个js对象中,代码如下:
public class JavaScriptInterface {
String mPasswrod;
String mUsername;
@JavascriptInterface
public void getHTML(final String html) {
if (!TextUtils.isEmpty(html)) {
saveWebViewUserData.saveUserDataWebView(webview, html);
}
}
@JavascriptInterface
public void save_password(final String password) {
if (!TextUtils.isEmpty(password)){
LogUtils.e("received from js. password = " + password);
this.mPasswrod = password;
checkData(mUsername, mPasswrod);
}
}
@JavascriptInterface
public void save_username(final String username) {
if (!TextUtils.isEmpty(username)) {
LogUtils.e("received from js. username = " + username);
this.mUsername = username;
checkData(mUsername, mPasswrod);
}
}
}
webview.addJavascriptInterface(new JavaScriptInterface(), "android");
private void getHtml() {
webview.loadUrl("javascript:window.android.getHTML('<html>'+document.body.innerHTML+'</html>');");
}










