- WebView開啟JavaScript腳本執(zhí)行。
- WebView設(shè)置供JavaScript調(diào)用的交互接口。
- 客戶端和網(wǎng)頁端編寫調(diào)用對方的代碼。
Java設(shè)置與調(diào)用js
webView.loadUrl(“javascript:methodName(parameterValues)”)
String call = "javascript:HelloWord()";
webView.loadUrl(call)
methodName是js的方法名,
parameterValues是參數(shù)。
WebView webview = (WebView) findViewById(R.id.testWebview);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);// 啟動js腳本
//添加與js的交互接口,起的名稱與js代碼中的接口名稱要一致
webview.addJavascriptInterface(new JavascriptImgInterface(), "connect");
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
//網(wǎng)頁加載好了之后調(diào)用js的方法
String call = "javascript:findImg()";
webview.loadUrl(call);
super.onPageFinished(view, url);
}
});
class JavascriptImgInterface{
/**
* 注意: 在Android4.2極其以上系統(tǒng)需要給提供js調(diào)用的方法前加入一個注釋:@JavaScriptInterface;
* 在虛擬機當中 Javascript調(diào)用Java方法會檢測這個anotation,
* 如果方法被標識@JavaScriptInterface則Javascript可以成功調(diào)用這個Java方法,否則調(diào)用不成功。
* @param img
*/
@JavascriptInterface
public void showImg(String img){
//利用js傳過來的參數(shù)得到圖片的地址
Log.d("HERE", "showImg: "+img);
Intent intent = new Intent();
intent.putExtra("ImageUrl", img);
intent.setClass(ArticleActivity.this, ImageShowActivity.class);
startActivity(intent);
}
}
js調(diào)用Java
window.jsInterfaceName.methodName(parameterValues)
jsInterfaceName是java中設(shè)置的接口的名字,上面第四行的'connect'
methodName是調(diào)用的java中的方法名,
parameterValues是參數(shù)
String javascript ="function findImg(){"+
"var objs = document.getElementsByTagName('img');"+
"for(var i=0;i<objs.length;i++){"+
"objs[i].onclick=function(){" +
"window.connect.showImg(this.src)" +
"}"+
"}}";