优秀案例我爱编程二楼后座android

Android与Js通信之JsBridge再封装

2017-04-19  本文已影响338人  r09er

使用步骤

图2-1
WebViewTools webViewTools = new WebViewTools(webView);

注意:Js和Android方法的第一个参数需要两端保持一致,并且Js代码必须使用window.WebViewJavascriptBridge.callHandler(x,y,function(data))这种类型的方法,因为在Android端进行的Js文件的注入,如果不用该方法,Android端则与Js无法与正确交互

//Js代码
//Js方法第一个参数为两端约定好的方法名
//第二个参数为传递给Android的数据内容,String类型
//第三个参数为function回调
function testClick1() {
            //唤起本地方法
            window.WebViewJavascriptBridge.callHandler(
                'callNative'
                , {'data': 'data com from Js'}
                , function(responseData) {
                  //responseData是Android回调给Js的数据
                  //注意responseData只能是String类型
                }
            );
        }

//Android端代码
//第一个参数为两端约定好的方法名
//第二个参数为方法回调
   webViewTools.registerWebViewFunction("callNative", new JsCallBack() {
            @Override
            public void notifyNativeMethod() {
                //唤起本地功能
            }
            @Override
            public void JsData(String data) {
                Log.d("WebViewTools", "Js传递过来的数据"+data);
            }
            @Override
            public void CallBack(CallBackFunction function) {
                function.onCallBack("传递给Js的数据内容");
            }
        });

注意:Js和Android方法的第一个参数需要两端保持一致,并且Js代码必须使用 bridge.registerHandler(x, function(data, responseCallback){}因为在Android端进行的Js文件的注入,如果不用该方法,Android端则与Js无法与正确交互

//Js代码
bridge.registerHandler("callJs", function(data, responseCallback) {
                //data为Android端传递过来的数据
                responseCallback("回调给Android的数据");
            });

//Android端代码
webViewTools.callWebFunction("callJs", "data from Java", new JavaCallBack() {
            @Override
            public void onJsResponse(String data) {
                Log.d("webViewTools", "Js的回调数据" + data);
            }
        });

这样就完成了Android和Js的双向调用,并且双向都能通过回调进行相应的数据交互。因为暂时只是使用了双向的通信方法,更多的配置和使用请查看原项目地址:JsBridge


相关资料:

上一篇 下一篇

猜你喜欢

热点阅读