您的位置:首页 > 移动开发 > Android开发

【Android实测】WebView的JS注入

2017-05-27 12:32 435 查看
今天有个傻逼要做一个功能,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相关一概不熟啊。

嗯……真机效果图?



Intelligent Point ! Give me five !
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: