JSBridge

window.AlipayJSBridge || (function() {

    if (navigator.userAgent.indexOf(' AlipayClient/') < 0) {
        return;
    }
    if ((navigator.userAgent.indexOf(' AFWealth/') < 0) && (navigator.userAgent.indexOf('AM/') < 0)) {
        return;
    }

    var messenger = window.__alipayConsole__ || window.console;
    var log = messenger.log;
    var postMessage = function(msg) {
        log.call(messenger, "h5container.message: " + msg);
    };
    var callbackPoll = {};
    window.AlipayJSBridge = {
        call: function(func, param, callback) {
            if ('string' !== typeof func) {
                return;
            }
            if ('function' === typeof param) {
                callback = param;
                param = null;
            } else if (typeof param !== 'object') {
                param = null;
            }
            var clientId = '' + new Date().getTime() + (Math.random());
            if ('function' === typeof callback) {
                callbackPoll[clientId] = callback;
            }
            var invokeMsg = JSON.stringify({
                func: func,
                param: param,
                msgType: 'call',
                clientId: clientId
            });
            postMessage(invokeMsg);
        },
        callback: function(clientId, param) {
            var invokeMsg = JSON.stringify({
                clientId: clientId,
                param: param
            });
            postMessage(invokeMsg);
        },
        trigger: function(name, param, clientId) {
            console.log('bridge.trigger ' + name);
            if (name) {
                var evt = document.createEvent('Events');
                evt.initEvent(name, false, true);
                if (typeof param === 'object') {
                    for (var k in param) {
                        evt[k] = param[k];
                    }
                }
                evt.clientId = clientId;
                var prevent = !document.dispatchEvent(evt);
                if (clientId && name === 'back') {
                    AlipayJSBridge.callback(clientId, {
                        prevent: prevent
                    });
                }
            }
        },
        _invokeJS: function(resp) {
            console.log('bridge._invokeJS: ' + resp);
            resp = JSON.parse(resp);
            if (resp.msgType === 'callback') {
                var func = callbackPoll[resp.clientId];
                if (!(typeof resp.keepCallback == 'boolean' && resp.keepCallback)) {
                    delete callbackPoll[resp.clientId];
                }
                if ('function' === typeof func) {
                    setTimeout(function() {
                        func(resp.param);
                    }, 1);
                }
            } else if (resp.msgType === 'call') {
                resp.func && this.trigger(resp.func, resp.param, resp.clientId);
            }
        }
    };
    var readyEvent = document.createEvent('Events');
    readyEvent.initEvent('AlipayJSBridgeReady', false, false);
    var docAddEventListener = document.addEventListener;
    document.addEventListener = function(name, func) {
        if (name === readyEvent.type) {
            setTimeout(function() {
                func(readyEvent);
            }, 1);
        } else {
            docAddEventListener.apply(document, arguments);
        }
    };
    AlipayJSBridge.startupParams = '{startupParams}';
    document.dispatchEvent(readyEvent);
})();

results matching ""

    No results matching ""