【實(shí)踐】客戶端JSBridge實(shí)現(xiàn)文檔

目標(biāo)

實(shí)現(xiàn)Native與JS頁(yè)面的相互調(diào)用

  • JS從Native調(diào)取Token
  • JS調(diào)取Native跳轉(zhuǎn)
  • Native調(diào)取當(dāng)前JS里的消息信息、用戶信息等
  • JS掉起Native支付頁(yè)面,Native支付完成(失?。┖蠡卣{(diào)給JS

實(shí)現(xiàn)框架 (Android 、iOS、JS)

android參考:https://github.com/lzyzsd/JsBridge、https://github.com/hjhrq1991/JsBridge

iOS參考:https://github.com/LOVEGLXR/WebNewsJSBridgeOC

JS接入方法:參考android或iOS的任何一個(gè)即可

示例代碼<支付>

H5


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="initial-scale=1, user-scalable=0, minimal-ui">

    <title></title>

</head>

<script type="text/javascript" src="/res/common/js/jquery.js"></script>

<p>

    <input type="button" id="enter" value="調(diào)起支付" onclick="click1();"

    />

</p>

<br/>

<script>

    // 聲明初始化JSBridge失敗數(shù)據(jù)

    var default_data = {

        error: "1"

    };

    //聲明 connect_JSBridge

    var connectMerchantJSBridge = function (callback) {

        try {

            if (window.WebViewJavascriptBridge) {

                callback(WebViewJavascriptBridge);

            } else {

                document.addEventListener("TestJavascriptBridgeReady", function () {

                    callback(WebViewJavascriptBridge);

                }, false);

            }

        } catch (ex) { }

    };

    //聲明 cmb_JSBridge

    var cmbMerchantBridge = {

        initSignNet: function (payData,name) {

            if (!payData) {

                payData = default_data;

            }

            connectMerchantJSBridge(function (bridge) {

                if (typeof bridge === "undefined") {

                    return;

                }

                bridge.callHandler(name, JSON.stringify(payData));

            });

        },

    };

    //注冊(cè)調(diào)用本頁(yè)面方法

    connectMerchantJSBridge(function(bridge) {

        bridge.init(function(message, responseCallback) {

        });

        //支付成功回調(diào)

        bridge.registerHandler("onPaySuccess", function(data, responseCallback) {

            console.log(data)

        });

        //支付失敗回調(diào)

        bridge.registerHandler("onPayFail", function(data, responseCallback) {

            console.log(data)

        });

    })

    //注冊(cè)調(diào)起支付

    window.cmbMerchantBridge = cmbMerchantBridge;

    function click1()

    {

        try {

          cmbMerchantBridge.initSignNet("ercode", "requestPay");

        } catch (ex) { }

    }

</script>

</body>

</html>

Android

1.根據(jù) 橋名稱(chēng) TJJavascriptBridge 注冊(cè) JsBridge


webView.setDefaultHandler(new DefaultHandler()); 

webView.setCustom("TJJavascriptBridge");

2.注冊(cè)JS調(diào)用Native的方法:requestPay


webView.registerHandler("requestPay", (data, function) -> { 

    //跳轉(zhuǎn)到支付頁(yè)面

});

3.支付完成(或失敗)后回調(diào)JS


//微信支付成功通過(guò)EventBus回調(diào) 

@Subscribe(threadMode = ThreadMode.MAIN) 

public void onPayEvent(PayEvent event) { 

if (event.isSuccess) { 

webView.callHandler("onPaySuccess", "", data -> { 

}); 

} else { 

webView.callHandler("onPayFail", event.failurReason, data -> { 

}); 

} 

}

iOS

1.引入 WebViewJavascriptBridge 并注冊(cè)到 UIWebview


@property WebViewJavascriptBridge* bridge;

[WebViewJavascriptBridge enableLogging];

_bridge = [WebViewJavascriptBridge bridgeForWebView:_mWebView webViewDelegate:self handler:nil];

2.注冊(cè)JS調(diào)用Native的方法:requestPay


[_bridge registerHandler:@"requestPay" handler:^(id data, WVJBResponseCallback responseCallback) {

        //跳轉(zhuǎn)到支付頁(yè)面

 }];

3.支付完成(或失?。┖蠡卣{(diào)JS


- (void) onPaySuccess{

    [_bridge callHandler:@"onPaySuccess"];

}

- (void) onPayFail{

    [_bridge callHandler:@"onPayFail" data:@"失敗原因:***"];

}


【關(guān)注公眾號(hào) 發(fā)現(xiàn)更多精彩】
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容