JSBridge.js 3.33 KB
var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
var appClient = null;
function AppClient(appObj, isAndroid) {
    this.appObj = appObj;
    this.isAndroid = isAndroid;
};
function isJson(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
function toJson(str) {
    var i = str.index('{')git
    try {
        var arr = str.split(2,str.length - 4)
        console.log(arr)
    } catch (e) {
        return {}
    }
}
layer.open({
    content: "isAndroid:"+ isAndroid+ ",isiOS" + isiOS,
    time: 2
})
AppClient.prototype.getERCode = function (jsonStr, getCallback, postCallback) {
    var dataParams = "";
    if(isJson(jsonStr)){
        dataParams = JSON.parse(jsonStr);
    }
    var param = {
        from: 'H5',
        params: dataParams
    };
    if(this.isAndroid) {
        window.WebViewJavascriptBridge.callHandler('getERCode', jsonStr, function (res) {
            layer.open({
                content: res,
                time: 2
            })
        });
    } else {
        this.appObj.registerHandler("postERCOde", postCallback)
        this.appObj.callHandler("getERCode", param, getCallback);
    }
};
AppClient.prototype.getGPS = function (jsonStr, getCallback, postCallback) {
    var dataParams = "";
    if(isJson(jsonStr)){
        dataParams = JSON.parse(jsonStr);
    }
    var iOSData = {
        from: 'H5',
        params: dataParams
    };
    if(this.isAndroid) {
        window.WebViewJavascriptBridge.callHandler('getGPS', jsonStr, function (res) {
            layer.open({
                content: res,
                time: 2
            })
        });
    } else {
        this.appObj.registerHandler("postGPS", postCallback)
        this.appObj.callHandler("getGPS", param, getCallback);
    }


    // }
};

if(isAndroid || isiOS) {

    function setupWebViewJavascriptBridge(callback) {

        if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
        if(isiOS){
            if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
            window.WVJBCallbacks = [callback];
            var WVJBIframe = document.createElement('iframe');
            WVJBIframe.style.display = 'none';
            WVJBIframe.src = 'https://__bridge_loaded__';
            document.documentElement.appendChild(WVJBIframe);
            setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
        } else if (isAndroid) {
            document.addEventListener('WebViewJavascriptBridgeReady', function (event) {
                callback(WebViewJavascriptBridge)
            }, false)
        }
    }
    setupWebViewJavascriptBridge(function(bridge) {
        if(isAndroid) {
            appClient =  new AppClient(window.WebViewJavascriptBridge, true);
            layer.open({
                content: JSON.stringify(appClient),
                time: 2
            })
            bridge.init(function (message, responseCallback) {
                responseCallback({'Javascript Responds': 'Wee!'})
            })
        }
        if(isiOS) {
            appClient = new AppClient(bridge, false);
        }
        // 此处可以调用一些init的方法
    });
} else {
    // appClient = new AppClient({}, false);
}