当时业务的需求是这样的,H5有一个活动商品列表的界面,IOS和Android共用这一个界面,点击商品可以跳转到Android原生的商品详情界面并传递商品ID;  大概就是点击H5界面跳转到Android原生界面

好了,需求已经分析完毕了,Android只需要获取H5的点击事件和传递的参数;

来,上代码:

/启用支持javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);

Android4.2以上需要@JavascriptInterface注解,其目的是为了安全;

public class JavaScriptObject{
    public JavaScriptObject(Activity activity) {

    }
    @JavascriptInterface
    public void setToken(String token){
        //token就是商品的ID,这里拿到商品的ID后直接跳转到商品详情页,并把id传递过去
    }
    @JavascriptInterface
    public void definedShare(String ShareJson){
    }
}

/*
*添加js接口,参数1是本地类名,参数2是标记;H5调用需要 "window.标记.类名中的方法名" 才能调用
*/
webView.addJavascriptInterface(new JavaScriptObject(this), "android");

到这里Android端需要写的就完成了;

这个是我截的图,可以看一下:

这里是H5需要写的代码:

<script type="text/javascript">
        function s(){
        //调用Android的setToken()方法
        var result =window.android.setToken(goodsId);
        document.getElementById("p").innerHTML=result;
        }
</script>

———————————————————————————————————————————-

附:如果在Android端调用H5中的方法:

 /*
  * Android调用H5中的方法 
 */
//传固定字符串可以直接用单引号括起来
 mWebView.loadUrl("javascript:alertMessage(\'哈哈\')");//访问H5里带参数的方法,alertMessage(message)为H5里的方法

 //当出入变量名时,需要用转义符隔开
 String content="1016";
 mWebView.loadUrl("javascript:alertMessage(\""   +content+   "\")"   );
 
 //Android调用有返回值js方法,安卓4.4以上才能用这个方法
 mWebView.evaluateJavascript("11", new ValueCallback<String>() {
     @Override
     public void onReceiveValue(String value) {
         Log.i(TAG, "js返回的结果为=" + value);
     }
 });

抽成方法:

 private void callJS(String callback, String status) {
        if (TextUtils.isEmpty(status)) {
            if (AndroidUtils.isKitkat()) {
                mWebView.evaluateJavascript("javascript:" + callback + "()", null);
            } else {
                mWebView.loadUrl("javascript:" + callback + "()");
            }
        } else {
            if (AndroidUtils.isKitkat()) {
                mWebView.evaluateJavascript("javascript:" + callback + "(\'" + status + "\')", null);
            } else {
                mWebView.loadUrl("javascript:" + callback + "(\'" + status + "\')");
            }
        }
    }

版权声明:本文为cuichen16原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cuichen16/p/10786000.html