【Android实测】WebView的JS注入

来源:互联网 发布:微信转换淘宝链接 编辑:程序博客网 时间:2024/05/16 06:32

今天有个傻逼要做一个功能,webview加载页面判断是指定页面,就跑一段js给这个页面上的某个控件赋个焦点。其实就是loadUrl方法调两次就好了,但是我之前想错了,我以为每次loadUrl都会把上一个页面刷过去,然而测试发现下一次loadUrl里放某些js是不会把页面改变掉的。
嗯,我蛋花的原话是:“Js里只要不涉及跳转或链接都不会覆盖第一个链接”。
蛋花的CSDN账号是啥?

讲测试。
首先需要一个html页面,假装这是第三方:

<html><head><meta charset="UTF-8"><title>Hello,JS</title></head><body><style type="text/css">       .btn {            color: white;            background-color: #008aa6;            padding: 0px 1em;            height: 22px;            margin-left: 10px;            border: 0px solid black;            border-radius: 5px;        }        .btn:hover {            background-color: #ff0000;        }        .btn:focus {            background-color: #00ff00;        }        /*active 要在后面 否则会被hover覆盖*/        .btn:active {            background-color: #000000;        }    </style><p>hello world 喵</p><button type="button" id="btn_1" class="btn">Click Me! 1</button><button type="button" id="btn_2" class="btn">Click Me! 2</button><button type="button" id="btn_3" class="btn" onclick="alert('11111')">Click Me! 3</button><button type="button" id="btn_4" class="btn">Click Me! 4</button></body></html>

然后就是安卓这边,写一个只有一个webview的页面做测试,第一个loadUrl写在要加载页面的地方,我的写在了onCreate:

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_webview);        w = (WebViewSupportJS) findViewById(R.id.webviewSupportJS);        w.loadUrl(http://192.168.8.111:8080/webpage/helloJS.html);    }

然后是第二个loadUrl,考虑到需求是给页面赋焦点,那么就放在了webview的页面加载完成的时候。我这边是自定义WebView中设置了WebViewClient:

        // 设置支持JS        getSettings().setJavaScriptEnabled(true);        setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                return false;            }            @Override            public void onPageFinished(WebView view, String url) {                // TODO Auto-generated method stub                super.onPageFinished(view, url);//              loadUrl("javascript:alert('hi')");                loadUrl("javascript:var div = document.getElementById(\"btn_3\");\n" +                        "            div.focus();");            }        });

测试发现div.focus();并没有粗线触发点击事件的情况,23333,果然html相关一概不熟啊。

嗯……真机效果图?

webview注入js测试效果

Intelligent Point ! Give me five !