我正在尝试将javascript注入我在webview中加载的页面.例如,我通过在自定义WebViewClient类中覆盖'onPageFinished'将值放入给定的文本框中:
public class MyAppWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
view.loadUrl("javascript:" +
"document.getElementById('elid').value = 'texthere';");
}
}
Run Code Online (Sandbox Code Playgroud)
这在浏览网站和单击链接时正常工作,但是当我按下后退按钮时,java/javascript似乎没有正确执行(文本框没有正确填写.
按下后退按钮时会调用onPageFinished函数,但它似乎是在当前页面上执行javascript,而不是在返回的页面上执行.
https://github.com/henrychuangtw/Android-Javascript-Injection
第1步:创建一个由javascript调用的类
class MyJavaScriptInterface
{
@JavascriptInterface
public void processHTML(String html)
{
//called by javascript
}
}
Run Code Online (Sandbox Code Playgroud)
第2步:注册javascript界面
webview1.addJavascriptInterface(new MyJavaScriptInterface(), "MYOBJECT");
Run Code Online (Sandbox Code Playgroud)
第3步:将javascript注入页面
webview1.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
StringBuilder sb = new StringBuilder();
sb.append("document.getElementsByTagName('form')[0].onsubmit = function () {");
sb.append("var objPWD, objAccount;var str = '';");
sb.append("var inputs = document.getElementsByTagName('input');");
sb.append("for (var i = 0; i < inputs.length; i++) {");
sb.append("if (inputs[i].type.toLowerCase() === 'password') {objPWD = inputs[i];}");
sb.append("else if (inputs[i].name.toLowerCase() === 'email') {objAccount = inputs[i];}");
sb.append("}");
sb.append("if (objAccount != null) {str += objAccount.value;}");
sb.append("if (objPWD != null) { str += ' , ' + objPWD.value;}");
sb.append("window.MYOBJECT.processHTML(str);");
sb.append("return true;");
sb.append("};");
view.loadUrl("javascript:" + sb.toString());
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9583 次 |
| 最近记录: |