美文网首页
H5页面与原生交互的方法之 二、JsBridge

H5页面与原生交互的方法之 二、JsBridge

作者: channelRead0 | 来源:发表于2018-06-01 16:15 被阅读0次

    JsBridge配置方法请看第一篇
    H5页面与原生交互的方法之 一、addJavascriptInterface

    JsBridge的使用方法

    js调用java

    1、指定处理者
    java创建处理者

            webView.registerHandler("submitFromWeb", new BridgeHandler() {
                @Override
                public void handler(String data, CallBackFunction function) {
                    CusToast.showToast("皇上收到请求:" + data);
                    function.onCallBack("朕准了");
                }
            });
    

    js指定处理者

            function testClick() {
                var str1 = document.getElementById("text1").value;
    
                //send message to native
                var data = {str1};
                window.WebViewJavascriptBridge.callHandler('submitFromWeb'
                   , {'param': data}
                   , function(responseData) {
                        document.getElementById("show").innerHTML = responseData;
                   });
            }
    

    html

    <input type="text" id="text1" value="请皇上赏赐美女一名" />
    <input type="button" id="enter" value="向皇上提出要求" onclick="testClick();"/>
    

    2、不指定处理者
    java添加默认处理者

            webView.setDefaultHandler(new BridgeHandler() {
                @Override
                public void handler(String data, CallBackFunction function) {
                    CusToast.showToast("收到js发送的信息" + data);
                    function.onCallBack("copy that");
                }
            });
    

    js发送信息

            //发送泛消息
            function testClick1() {
                var data = "";
                window.WebViewJavascriptBridge.send(
                        data
                        , function(responseData) {
                            document.getElementById("show").innerHTML = "repsonseData from java, data = " + responseData
                        }
                );
            }
    
    

    html

    <input type="button" id="enter1" value="发送信息" onclick="testClick1();"/>
    
    java调用js

    1、指定处理者
    js创建处理者

            // 注册回调函数,第一次连接时调用 初始化函数
            connectWebViewJavascriptBridge(function(bridge) {
                // 接收native发来的消息,指定处理者,返回给native结果
                bridge.registerHandler("functionInJs", function(data, responseCallback) {
                    document.getElementById("init").innerHTML = ("结果: = " + data);
                    if (responseCallback) {
                        var responseData = "被皇上宠幸";
                        responseCallback(responseData);
                    }
                });
            })
    

    java指定处理者

            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    webView.callHandler("functionInJs", "宣老周进殿", new CallBackFunction() {
    
                        @Override
                        public void onCallBack(String data) {
                            CusToast.showToast("接收到js返回的数据:" + data);
                        }
                    });
                }
            });
    

    2、不指定处理者
    js接收native发送的消息

            // 注册回调函数,第一次连接时调用 初始化函数
            connectWebViewJavascriptBridge(function(bridge) {
                //接收native发来的泛消息
                bridge.init(function(message, responseCallback) {
                    console.log('JS got a message', message);
                    var data = {
                        '皇子': '朱棣',
                        '皇孙': '朱高炽'
                    };
                    console.log('JS responding with', data);
                    responseCallback(data);
                });
            })
    

    java发送消息

            webView.send("朱八八驾崩了", new CallBackFunction() {
                @Override
                public void onCallBack(String data) {
                    CusToast.showToast("进京皇子皇孙有:" + data);
                }
            });
    

    js初始化注册事件监听,固定写法

            function connectWebViewJavascriptBridge(callback) {
                if (window.WebViewJavascriptBridge) {
                    callback(WebViewJavascriptBridge)
                } else {
                    document.addEventListener(
                        'WebViewJavascriptBridgeReady'
                        , function() {
                            callback(WebViewJavascriptBridge)
                        },
                        false
                    );
                }
            }
    

    相关文章

      网友评论

          本文标题:H5页面与原生交互的方法之 二、JsBridge

          本文链接:https://www.haomeiwen.com/subject/mqjksftx.html