Android Webview Javascript注入

xur*_*r17 1 android webview

我正在尝试将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,而不是在返回的页面上执行.

Hen*_*ang 5

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)