JSbridge android与js交互框架

原文地址:https://www.imooc.com/article/70143?block_id=tuijian_wz     

               https://www.jianshu.com/p/c80ceb1ff417?from=groupmessage

1.项目build.gradle

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

2.添加依赖

  implementation 'com.github.lzyzsd:jsbridge:1.0.4'

3.布局引用

 <com.github.lzyzsd.jsbridge.BridgeWebView
     android:id="@+id/mY_bridge"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>

4.给js提供方法(按方法名接收)

   /**
         * 提供给JS调用的方法  //TODO 最常用的
         * */
        bridgeWebView.registerHandler("camera", new BridgeHandler() {//camera :方法名
            @Override
            public void handler(String data, CallBackFunction function) {
                if (!TextUtils.isEmpty(data)) {
                    Log.e(log, "接收到JS的数据====camera====" + data);
                    Toast.makeText(MainActivity.this, "接收到JS的数据====camera====" + data, Toast.LENGTH_SHORT).show();
                    //给JS回传的数据
                    function.onCallBack("收到JS调用相机需求,一拍照,返回照片地址,收到了么666666666666666666");
                } else {
                    Toast.makeText(MainActivity.this, "JS传参为空", Toast.LENGTH_SHORT).show();
                }
            }
        });

4.1.js使用方法

 /**
         *js调用方式
         * */
//        window.WebViewJavascriptBridge.callHandler(
//                'camera'  //方法名
//                , {'appKey':appKey, 'appSecret':secret}  //给移动端的值
//            ,function(responseData) {//移动端回传的数据
//            alert(responseData);
//            document.getElementById('location').innerHTML = responseData;
//        }
//);

5.给js提供方法(默认接收)

 bridgeWebView.setDefaultHandler(new BridgeHandler() {
            @Override
            public void handler(String data, CallBackFunction function) {
                if (!TextUtils.isEmpty(data)) {
                    Log.e(log, "接收到JS的数据========" + data);
//                    给JS回传的数据
                    function.onCallBack("要返回给JS的数据");
                } else {
                    Toast.makeText(MainActivity.this, "JS传参为空", Toast.LENGTH_SHORT).show();
                }
            }
        });

5.1。js使用方法

  WebViewJavascriptBridge.send(
        data,        //参数
        function(responseData){     //java中DefaultHandler所实现的方法中callback所定义的入参
        }
    )

6;js给android提供方法(指定方法接收)  js需要初始化

 //注册事件监听,初始化
       function setupWebViewJavascriptBridge(callback) {
           if (window.WebViewJavascriptBridge) {
               callback(WebViewJavascriptBridge)
           } else {
               document.addEventListener(
                   'WebViewJavascriptBridgeReady'
                   , function() {
                       callback(WebViewJavascriptBridge)
                   },
                   false
               );
           }
       }  


//指定接收,参数functionInJs 与java保持一致
           bridge.registerHandler("fangfaming", function(data, responseCallback) {
               document.getElementById("show").innerHTML = '指定接收到Java的数据: ' + data;

               var responseData = 'js指定接收完毕,并回传数据给java';
               responseCallback(responseData); //回传数据给java
           });
    

6.(1)android接收方法

  bridgeWebView.callHandler("fangfaming", "传给JS的值", new CallBackFunction() {
            @Override
            public void onCallBack(String data) {
                if (!TextUtils.isEmpty(data)) {
                    Log.e(log, "JS返回的值=====" + data);
                }
            }
        });

6.2;js给android提供方法(默认接收)

 //默认接收
           bridge.init(function(message, responseCallback) {
               document.getElementById("show").innerHTML = '默认接收到Java的数据: ' + message;

               var responseData = 'js默认接收完毕,并回传数据给java';
               responseCallback(responseData); //回传数据给java
           });

6.2.2   android 接收方法

  bridgeWebView.send("发送给JS默认接受的值", new CallBackFunction() {
            @Override
            public void onCallBack(String data) {
                if (!TextUtils.isEmpty(data)) {
                    Log.e(log, "JS返回的值=====" + data);
                }
            }
        });

别忘了加上网络权限

webview启动 JavaScript    

bridgeWebView.getSettings().setJavaScriptEnabled(true);  //启用 JavaScript

点我跳转到git地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值