Android/IOS與H5 jsbridge 相互調(diào)用推薦方式

如果幫助到您,請(qǐng)輕點(diǎn)【喜歡】

移動(dòng)端插件

H5調(diào)用封裝

var u = navigator.userAgent;
window.isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android終端 
window.isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios終端 

window.jsbridge = function (callback) {
    if (window.WebViewJavascriptBridge) {
        return callback(WebViewJavascriptBridge);
    } else {
        document.addEventListener(
            'WebViewJavascriptBridgeReady',
            function () {
                callback(WebViewJavascriptBridge)
            },
            false
        );
    }
    if (window.isIOS) {
        // old ios method
        //setTimeout(function () {
        //    if (window.WVJBCallbacks) {
        //        return window.WVJBCallbacks.push(callback);
        //    }
        //}, 500)
        //window.WVJBCallbacks = [callback];
        //var WVJBIframe = document.createElement('iframe');
        //WVJBIframe.style.display = 'none';
        //WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__';
        //document.documentElement.appendChild(WVJBIframe);
        //setTimeout(function () {
        //    document.documentElement.removeChild(WVJBIframe)
        //}, 0)

        // new ios method
        if (window.WKWebViewJavascriptBridge) { return callback(WKWebViewJavascriptBridge); }
        if (window.WKWVJBCallbacks) { return window.WKWVJBCallbacks.push(callback); }
        window.WKWVJBCallbacks = [callback];
        window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null)
    }
}

if (!window.isIOS) {
    jsbridge(function (bridge) {
        bridge.init(function (message, responseCallback) {
            var data = {};
            responseCallback(data);
        });
    })
}

/**
 * @param  {option對(duì)象}
 * method: 調(diào)用的方法
 * data: 傳遞的參數(shù)
 * callback: 回掉方法
 * @return {[type]}
 */
function bridgeCallHandler(option) {
    // alert(option.method)
    jsbridge(function (bridge) {
        bridge.callHandler(
            option.method,
            option.data || {},
            function (responseData) {
                if (option.callback) {
                    option.callback(responseData)
                }
            }
        );
    })
}

//原生調(diào)js
window.bridgeRegisterHandler = function (option) {
    // alert(option.method);
    jsbridge(function (bridge) {
        bridge.registerHandler(
            option.method,
            function (data, responseCallback) {
                if (option.callback) {
                    option.callback(data);
                }
                responseCallback(option.data || {});
            }
        );
    })
}

/**
 * 傳入的option對(duì)象格式
 * {
 *    method:[String],
 *    data:[Object],
 *    callback:[Function]
 * }
 */
window.callNativePage = function (option) {
    bridgeCallHandler({
        method: 'callNativePage',
        data: option.data,
        callback: function (responseData) {
            if (option.callback) {
                option.callback(responseData);
            }
        }
    })
}

調(diào)用示例

  • js 調(diào)用原生
callNativePage({
    data: { msg : 'test send msg' },
    callback:function(responseData){
        console.log('來(lái)源于原生的反饋信息',responseData)
    }
})
  • 原生調(diào)用 js 方法,需主動(dòng)注冊(cè)
window.bridgeRegisterHandler({
    method:"提供給原生調(diào)用的方法名",
    callback:function(data){
        // data : 原生傳遞給前端的data
    }
})

最后編輯于
?著作權(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ù)。

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