- WebView开启JavaScript脚本执行。
- WebView设置供JavaScript调用的交互接口。
- 客户端和网页端编写调用对方的代码。
Java设置与调用js
webView.loadUrl(“javascript:methodName(parameterValues)”)
String call = "javascript:HelloWord()";
webView.loadUrl(call)
methodName是js的方法名,
parameterValues是参数。
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) {
//网页加载好了之后调用js的方法
String call = "javascript:findImg()";
webview.loadUrl(call);
super.onPageFinished(view, url);
}
});
class JavascriptImgInterface{
/**
* 注意: 在Android4.2极其以上系统需要给提供js调用的方法前加入一个注释:@JavaScriptInterface;
* 在虚拟机当中 Javascript调用Java方法会检测这个anotation,
* 如果方法被标识@JavaScriptInterface则Javascript可以成功调用这个Java方法,否则调用不成功。
* @param img
*/
@JavascriptInterface
public void showImg(String img){
//利用js传过来的参数得到图片的地址
Log.d("HERE", "showImg: "+img);
Intent intent = new Intent();
intent.putExtra("ImageUrl", img);
intent.setClass(ArticleActivity.this, ImageShowActivity.class);
startActivity(intent);
}
}
js调用Java
window.jsInterfaceName.methodName(parameterValues)
jsInterfaceName是java中设置的接口的名字,上面第四行的'connect'
methodName是调用的java中的方法名,
parameterValues是参数
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)" +
"}"+
"}}";
网友评论