当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID; 大概就是点击H5界面跳转到Android原生界面;
好了,需求已经分析完毕了,Android只需要获取H5的点击事件和传递的参数;
来,上代码:
1/启用支持javascript 2WebSettings settings = webView.getSettings(); 3settings.setJavaScriptEnabled(true);
Android4.2以上需要@JavascriptInterface注解,其目的是为了安全;
1public class JavaScriptObject{ 2 public JavaScriptObject(Activity activity) { 3 4 } 5 @JavascriptInterface 6 public void setToken(String token){ 7 //token就是商品的ID,这里拿到商品的ID后直接跳转到商品详情页,并把id传递过去 8 } 9 @JavascriptInterface 10 public void definedShare(String ShareJson){ 11 } 12} 13 14 15 16/* 17*添加js接口,参数1是本地类名,参数2是标记;H5调用需要 "window.标记.类名中的方法名" 才能调用 18*/ 19webView.addJavascriptInterface(new JavaScriptObject(this), "android");
到这里Android端需要写的就完成了;
这个是我截的图,可以看一下:

这里是H5需要写的代码:
1<script type="text/javascript"> 2 function s(){ 3 //调用Android的setToken()方法 4 var result =window.android.setToken(goodsId); 5 document.getElementById("p").innerHTML=result; 6 } 7</script>
----------------------------------------------------------------------------------------------------------------------------------
附:如果在Android端调用H5中的方法:
1 /* 2 * Android调用H5中的方法 3 */ 4//传固定字符串可以直接用单引号括起来 5 mWebView.loadUrl("javascript:alertMessage('哈哈')");//访问H5里带参数的方法,alertMessage(message)为H5里的方法 6 7 //当出入变量名时,需要用转义符隔开 8 String content="1016"; 9 mWebView.loadUrl("javascript:alertMessage(\"" +content+ "\")" ); 10 11 //Android调用有返回值js方法,安卓4.4以上才能用这个方法 12 mWebView.evaluateJavascript("11", new ValueCallback<String>() { 13 @Override 14 public void onReceiveValue(String value) { 15 Log.i(TAG, "js返回的结果为=" + value); 16 } 17 });
抽成方法:
1 private void callJS(String callback, String status) { 2 if (TextUtils.isEmpty(status)) { 3 if (AndroidUtils.isKitkat()) { 4 mWebView.evaluateJavascript("javascript:" + callback + "()", null); 5 } else { 6 mWebView.loadUrl("javascript:" + callback + "()"); 7 } 8 } else { 9 if (AndroidUtils.isKitkat()) { 10 mWebView.evaluateJavascript("javascript:" + callback + "('" + status + "')", null); 11 } else { 12 mWebView.loadUrl("javascript:" + callback + "('" + status + "')"); 13 } 14 } 15 }