htm代码
<script> function callJS(){} //无参数 function callJS(param1){} //1个参数 function callJS(param1, param2){} //2哥参数 </script>特别注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。
定义一个数据回调接口类
public interface AndroidtoJsResponseCallback { public void previewPicture(String url); public void lookAttachment(String url); }定义一个与JS对象映射关系的Android类:AndroidtoJs
// 继承自Object类 public class AndroidtoJs extends Object{ private AndroidtoJsResponseCallback mResponseCallback; public AndroidtoJs(AndroidtoJsResponseCallback responseCallback) { mResponseCallback = responseCallback; } // 定义JS需要调用的方法 // 被JS调用的方法必须加入@JavascriptInterface注解 @JavascriptInterface public void previewPicture(String url) { mResponseCallback.previewPicture(url); } @JavascriptInterface public void lookAttachment(String url) { mResponseCallback.lookAttachment(url); } }建立android与js通信桥梁
webView.addJavascriptInterface(new AndroidtoJs(new AndroidtoJsResponseCallback() { @Override public void previewPicture(String url) { } @Override public void lookAttachment(String url) { } }), "JsBridge");html调用android代码
<script> function callAndroid(){ // 由于对象映射,所以调用JsBridge对象等于调用Android映射的对象 JsBridge.previewPicture("");//这样调用可以 window.JsBridge.previewPicture("");//加window也可以 } </script>JavaScript Window 对象 Window 对象 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。 全局变量是 window 对象的属性。 全局函数是 window 对象的方法。 甚至 HTML DOM 的 document 也是 window 对象的属性之一:
android4.2以下版本存在漏洞问题,具体请看文章:你不知道的 Android WebView 使用漏洞
其他2种详见文章Android:你要的WebView与 JS 交互方式 都在这里了,这里不做具体介绍了
参考: Android:你要的WebView与 JS 交互方式 都在这里了
如何在js调用java方法并取回返回值
Android - webview原生调用js并且得到返回值