Android端使用WebView注入一段js程式碼實現js呼叫android
需求:為網頁上個連結增加點選事件,但是這個連結無法增加js程式碼
url:http://public.rongcloud.cn/view/D4F444BE2D94D760329F3CF38B4AE35C
網頁截圖:
需要給“投融資訊“四個字設定點選事件
但是觀察原始碼
<body> |
<div class="wrap content"> |
<div class="content-inner"> |
<div class="content-header"> |
<h2
class="content-header-title">發貨房間很乾淨或</h2> |
<div class="content-header-info"> |
<span>2017-01-08</span> |
<span class="userId">投融資訊</a></span> |
</div> |
</div> |
<div class="content-body" > |
<p style="text-align: center;margin:10px 0;"> |
</p> |
<p style="margin-top:20px;" > |
<a
onclick |
</p> |
</div> |
<div
class="divider"
style="height: 1px;margin: 9px 0;overflow: hidden;background-color: #e5e5e5;margin-top: 18px; |
</div> |
並沒有具體的onclick事件,怎麼辦呢?
1、首先在Chrome上寫了端測試程式碼,測試沒問題
<script type="text/javascript">
var child=document.getElementsByTagName('a')[0];
child.onclick=function(){
userIdClick();
};
function userIdClick(){
myObj.getClose();
};
</script>
2、然後使用安卓端注入進來
webview.getSettings().setJavaScriptEnabled(true);
webview.addJavascriptInterface(new JSObject(), "myObj");
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Toast.makeText(MainActivity.this, "wodo-7-", Toast.LENGTH_SHORT).show();
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String js = "var script = document.createElement('script');";
js+= "script.type = 'text/javascript';";
js+="var child=document.getElementsByTagName('a')[0];";
js+="child.onclick=function(){userIdClick();};";
js+= "function userIdClick(){myObj.getClose();};";
webview.loadUrl("javascript:" + js);
}
});
class JSObject {
@JavascriptInterface
// sdk17版本以上加上註解
public String getData(String txt) {
return "12345678";
}
@JavascriptInterface
// sdk17版本以上加上註解
public void getClose() {
Toast.makeText(MainActivity.this, "dododo", Toast.LENGTH_SHORT)
.show();
// finish();
}
}
這樣就可以實現點選呼叫本地方法了。
二、如果想獲取html中某個內容
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String js = "var script = document.createElement('script');";
js+= "script.type = 'text/javascript';";
js+="var child=document.getElementsByTagName('a')[0];";
js+="child.onclick=function(){userIdClick();};";
js+= "function userIdClick(){myObj.getClose();};";
webview.loadUrl("javascript:" + js);
//view.loadUrl("javascript:window.myObj.showSource(document.getElementsByTagName('p')[1].innerHTML);");
view.loadUrl("javascript:myObj.showSource(document.getElementsByTagName('p')[0].innerHTML);"); //關鍵程式碼
}
});
/**
* 本地化JS物件(第一種方法)
*
* @author jiangwei1-g
*/
class JSObject {
@JavascriptInterface
// sdk17版本以上加上註解
public String getData(String txt) {
return "12345678";
}
@JavascriptInterface
// sdk17版本以上加上註解
public void getClose() {
Toast.makeText(MainActivity.this, "dododo", Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
// sdk17版本以上加上註解
public void showSource(String html) { //關鍵程式碼
Toast.makeText(MainActivity.this, html, Toast.LENGTH_SHORT).show();
System.out.println("====>html="+html);
}
}