当前位置 : 主页 > 网络编程 > JavaScript >

h5调用原生应用方法

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt var init = function (cb) { // 判断ios 和 android var device = (function () { var sUserAgent = window.navigator.userAgent.toLowerCase(), bIsIpad = sUserAgent.match(/ipad/i) == "ipad", bIsIphoneOs = sUserAgent.match(/iphone/i
gistfile1.txt
var init = function (cb) {
    // 判断ios 和 android
    var device = (function () {
        var sUserAgent = window.navigator.userAgent.toLowerCase(),
            bIsIpad = sUserAgent.match(/ipad/i) == "ipad",
            bIsIphoneOs = sUserAgent.match(/iphone/i) == "iphone",
            bIsAndroid = sUserAgent.match(/android/i) == "android";
        if (bIsIpad || bIsIphoneOs) {
            return 'ios';
        } else if (bIsAndroid) {
            return 'android';
        }
    })();
    //判断是否在一生约app内
    var isApp = (function () {
        var sUserAgent = navigator.userAgent.toLowerCase();
        if (sUserAgent.match(/yishengyue/i) == "yishengyue") {
            return true;
        } else {
            return false;
        }
    })();
    //ios桥接
    if (isApp) {
        if (device == "ios") {
            function connectToSwiftWebViewBridge(callback) {
                if (window.SwiftWebViewBridge) {
                    callback(SwiftWebViewBridge);
                } else {
                    document.addEventListener('SwiftWebViewBridgeReady', function () {
                        callback(SwiftWebViewBridge);
                    }, false);
                }
            }

            connectToSwiftWebViewBridge(function (bridge) {
                bridge.init();
                var app = function (obj) {

                    var send = obj.data ? obj.data : '';
                    bridge.callSwiftHandler(obj.funName, send, function (res) {
                        typeof obj.callback == "function" && obj.callback(res);
                    })
                }

                typeof cb == "function" && cb(app);
            });
        } else if (device == "android") {//安卓实际不需桥接 但是为了传参数与ios一致 还是进行了封装

            var app = function (obj) {

                if (obj.data) {
                    var send = JSON.stringify(obj.data);
                    var res = JsToNative[obj.funName](send);
                } else {
                    var res = JsToNative[obj.funName]();
                }
                typeof obj.callback == "function" && obj.callback(JSON.parse(res));
            }
            typeof cb == "function" && cb(app);
        }
    } else {
        typeof cb == "function" && cb();
    }
};


//使用方法
init(function (app) {
    if(app){
        // 到这里说明网页在一生约app中被打开
        // 并且已经桥接初始化完成 可以调用app定义好的方法
        // 例:调用app的原生分享  (app端定义的方法名为 'share')
        app({
            funName: "share",//app暴露给你的方法名称
            data: {          //传给app的参数
                title: '分享标题',
                des: '分享描述',
                img: "分享缩略图(url全路径)",
                url: 'http://www.baidu.com'//分享的url地址
            },
            callback: function(res) { //调用原生方法后的回调 app端可以通过res告诉你调用成功(失败)等其他业务数据 (也有可能没有回调)
                console.log(res);
            }
        })
    }else{
        // 这里说明该网页在普通浏览器中被打开
    }

});
网友评论