[Android]使用JsBridge配合WebView初始化每一个页面

现在有一个需求:根据页面传来的json,初始化android界面中的toolbar。

那么就来使用JsBridge吧

implementation 'com.github.lzyzsd:jsbridge:1.0.4'                            //  js和android交互框架

导入JsBridge项目,在布局中加入一个webview,然后来到代码:


        bridgeWebView= activity.findViewById(R.id.webView);
        bridgeWebView.setWebChromeClient(chromeClient);        //    按需求配置                    
        BridgeWebViewClient webViewClient = new BridgeWebViewClient(bridgeWebView){
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                progressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);

                bridgeWebView.send("发送 向js请求初始化", new CallBackFunction() {
                    @Override
                    public void onCallBack(String data) {
                        Bean_WebInit bean_webInit = new Gson().fromJson(data.toString(), new TypeToken<Bean_WebInit>(){}.getType());
//
                        Message message = Message.obtain();
                        message.what = UPDATE_TOOLBAR;
                        message.obj = bean_webInit;
                        handler.sendMessage(message);
                    }
                });
            }
        };
        bridgeWebView.setWebViewClient(webViewClient);
        bridgeWebView.loadUrl(url);

大头来了,重点是 BridgeWebViewClient这个设定,一般设置WebView的onPageFinished是用WebViewClient这个类的,可是BridgeWebView这个控件可能WebViewClient被覆盖了,所以只能覆写BridgeWebViewClient来实现onPageFinished来实现页面加载完成的回调。

而send方法两个参数,第一个参数是发送给js,让js处理的,第二个参数则是js回调给android的数据,其中的参数data就是js返回的了。

忘了说了,在js中要配合android写初始化配置:


        //注册回调函数,第一次连接时调用 初始化函数
       connectWebViewJavascriptBridge(function(bridge) {
            //初始化
           bridge.init(function(message, responseCallback) {
               var data = {
                   'btn_type': 'link',
                   'url': 'https://www.baidu.com',
                   'is_right_btn_show': true
               };
               responseCallback(data);
           });
       })


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

而js这边呢,我基本就看不懂了,反正把要传的键值对写到data参数里就是了。

ok,就是这样,更多的也不懂了。以上都是一个编程经验1年的萌新写的,有问题请指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值