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

目標(biāo)

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

  • JS從Native調(diào)取Token
  • JS調(diào)取Native跳轉(zhuǎn)
  • Native調(diào)取當(dāng)前JS里的消息信息、用戶信息等
  • JS掉起Native支付頁面,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)用本頁面方法

    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ù) 橋名稱 TJJavascriptBridge 注冊(cè) JsBridge


webView.setDefaultHandler(new DefaultHandler()); 

webView.setCustom("TJJavascriptBridge");

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


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

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

});

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


//微信支付成功通過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)到支付頁面

 }];

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)系作者
  • 序言:七十年代末问慎,一起剝皮案震驚了整個(gè)濱河市萍摊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌如叼,老刑警劉巖冰木,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笼恰,居然都是意外死亡踊沸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門社证,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逼龟,“玉大人,你說我怎么就攤上這事追葡∠俾桑” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵辽俗,是天一觀的道長疾渣。 經(jīng)常有香客問我,道長崖飘,這世上最難降的妖魔是什么榴捡? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮朱浴,結(jié)果婚禮上吊圾,老公的妹妹穿的比我還像新娘。我一直安慰自己翰蠢,他們只是感情好项乒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梁沧,像睡著了一般檀何。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上廷支,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天频鉴,我揣著相機(jī)與錄音,去河邊找鬼恋拍。 笑死垛孔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的施敢。 我是一名探鬼主播周荐,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼狭莱,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了概作?” 一聲冷哼從身側(cè)響起腋妙,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仆嗦,沒想到半個(gè)月后辉阶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘩扼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年谆甜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片集绰。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡规辱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出栽燕,到底是詐尸還是另有隱情罕袋,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布碍岔,位于F島的核電站浴讯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔼啦。R本人自食惡果不足惜榆纽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捏肢。 院中可真熱鬧奈籽,春花似錦、人聲如沸鸵赫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辩棒。三九已至狼忱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間一睁,已是汗流浹背藕赞。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卖局,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓双霍,卻偏偏與公主長得像砚偶,于是被迫代替她去往敵國和親批销。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容