123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532 |
- ;
- (function () {
- //初始化Promise方法
- var ua = navigator.userAgent;
- var p_ios = ua.match(/(iPhone\sOS)\s([\d_]+)/);
- var p_adr = ua.match(/(Android)\s+([\d.]+)/);
- var isIOS = p_ios ? true : false;
- var isAdr = !isIOS && p_adr ? true : false;
- var isQQVideo = /(QQLiveBrowser)/i.test(ua) || /(QQLiveBroadcast)/i.test(ua);
- var isLiveApp = /(QQLiveBroadcast)/i.test(ua);
- var authToken = {
- "data": "123456",
- "token": "FE3D6EE5233D64C4709A733DCF9C89BA"
- };
- if (typeof (bridge) == "undefined") {
- var bridge = null;
- }
- //默认的Promise模型,防止出错
- var Deferred = function () {
- return {
- reject: function () {
- return this;
- },
- resolve: function () {
- return this;
- },
- done: function () {
- return this;
- },
- fail: function () {}
- };
- };
- if ($ && $.Deferred) {
- //Zepto和jquery的Promise
- Deferred = function () {
- return $.Deferred();
- };
- } else if (window.txmv && txmv.base && txmv.base.Deferred) {
- //腾讯视频基础库的Promise
- Deferred = function () {
- return new txmv.base.Deferred();
- };
- }
- function parseJSON(str_json) {
- var json_msg = null;
- try {
- json_msg = JSON.parse(str_json);
- } catch (e) {
- json_msg = null;
- }
- return json_msg;
- }
- var DeferInfo = {};
- function getDefer(key, force) {
- if (!DeferInfo[key] || !!force) {
- DeferInfo[key] = {};
- DeferInfo[key]["defer"] = new Deferred();
- }
- return DeferInfo[key]["defer"];
- }
- //将正确返回的回调函数与Promise模型中的resolve绑定,保证resolve的时候,也同样会调用回调函数
- function RsyncDefer(func_suc) {
- var defer = Deferred();
- var _funcResolve = defer.resolve;
- defer.resolve = function () {
- _funcResolve.apply(this, Array.prototype.slice.call(arguments, 0));
- func_suc && func_suc.apply && func_suc.apply(null, Array.prototype.slice.call(arguments, 0));
- };
- return defer;
- }
- /*
- * 调用接口的默认逻辑
- * @param
- * str_method 接口名
- * json_param 参数名
- * fun_suc 返回值
- */
- function _handlerDefaultTpl(str_method, json_param, func_suc) {
- var defer = RsyncDefer(func_suc);
- _Bridge(function (json_msg) {
- if (json_msg && json_msg.state) {
- defer.resolve({
- state: 1,
- msg: "No Bridge Applied!"
- });
- } else {
- TenvideoJSBridge.invoke(str_method, json_param, function (str_msg) {
- var json_res = parseJSON(str_msg);
- defer.resolve({
- state: 0,
- data: json_res
- });
- });
- }
- });
- return defer;
- }
- /** @description 获取的接口
- * @param
- func_suc 获取到接口之后的回调函数
- @remark 首先判断ios接口是否存在,如果不存在的话,就监听下接口ready的事件,如果再5秒钟内两者都没有获取到接口,就提示失败
- */
- function _Bridge(func_suc) {
- var defer = RsyncDefer(func_suc);
- if (window.TenvideoJSBridge) {
- if (isAdr) {
- bridge = window.Unicom;
- } else {
- bridge = window.TenvideoJSBridge;
- }
- defer.resolve();
- } else {
- document.addEventListener('onTenvideoJSBridgeReady', function () {
- if (isAdr) {
- bridge = window.Unicom;
- } else {
- bridge = window.TenvideoJSBridge;
- }
- defer.resolve();
- });
- //如果5秒钟之后,还是没有对应的接口,就直接返回false,说明拉取接口失败了。
- setTimeout(function () {
- if (!window.TenvideoJSBridge) {
- defer.resolve({
- state: 1,
- msg: "No Bridge Applied!"
- });
- }
- }, 5000);
- }
- return defer;
- }
- QQVideoBridge = {
- bridge: null,
- auth: function (token) {
- authToken = !!token ? token : authToken;
- var defer = new getDefer("auth");
- if (!isQQVideo) {
- defer.reject(-1);
- return defer;
- }
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var iRet = bridge.auth(authToken.data, authToken.token);
- defer.resolve(iRet);
- } else {
- bridge.invoke("auth", authToken, function (code) {
- defer.resolve(code);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- getCarrierInfos: function (json_param, func_suc) {
- return _handlerDefaultTpl("getCarrierInfos", json_param, func_suc);
- },
- getCarrierEnableState: function (json_param, func_suc) {
- return _handlerDefaultTpl("getCarrierEnableState", json_param, func_suc);
- },
- getUnicomNativieInfo: function (json_param) {
- var defer = new getDefer("getUnicomNativieInfo");
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var json_msg = bridge.invoke('getUnicomNativeInfo', JSON.stringify(json_param));
- defer.resolve(parseJSON(json_msg));
- } else {
- if (isLiveApp) {
- bridge.invoke("getUnicomNativeInfo", json_param, function (json_msg) {
- var res = json_msg && json_msg.result;
- defer.resolve(res);
- })
- } else {
- bridge.invoke("getUnicomNativieInfo", json_param, function (json_msg) {
- defer.resolve(parseJSON(json_msg));
- })
- }
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- onNetworkChange: function () {
- tb.cookie.set("onNetworkChange", 1, location.hostname || location.host, false, 1);
- location.reload();
- },
- registNetworkChange: function () {
- var onNetworkChange = "QQVideoBridge.onNetworkChange";
- var netJson = {};
- netJson.callback = onNetworkChange;
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- window.Unicom.invoke('registerNetworkListener', JSON.stringify(netJson));
- } else if (isIOS) {
- bridge.invoke("registerNetworkListener", {}, function (json_msg) {
- location.reload();
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- },
- onRemoteUserMob: function (err, userMob) {
- var defer = new getDefer("getRemoteUserMob");
- if (err == 0) {
- defer.resolve(userMob);
- } else {
- defer.reject(-1);
- }
- },
- getRemoteUserMob: function (json_param) {
- var defer = new getDefer("getRemoteUserMob");
- if (!defer["loadok"]) {
- var defer = new getDefer("getRemoteUserMob", true);
- } else {
- return defer;
- }
- _Bridge(function () {
- if (bridge) {
- json_param = json_param || {};
- json_param.callback = "QQVideoBridge.onRemoteUserMob";
- if (isAdr) {
- bridge.invoke('getRemoteUserMob', JSON.stringify(json_param));
- } else {
- bridge.invoke("getRemoteUserMob", json_param, function (json_msg) {
- var oJson = parseJSON(json_msg);
- if (oJson.errcode == 0) {
- defer["loadok"] = true;
- defer.resolve(oJson.userMob);
- } else {
- defer.reject(-1);
- }
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- processResult: function (str_name, json_result) {
- var defer = new getDefer(str_name);
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var strJson = JSON.stringify(json_result);
- var ret = bridge.invoke(str_name, strJson);
- defer.resolve(ret);
- } else {
- bridge.invoke(str_name, json_result, function (ret) {
- defer.resolve(ret);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- saveResult: function (str_name, json_result) {
- var defer = new getDefer(str_name);
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var strJson = JSON.stringify(json_result);
- var ret = window.Unicom.invoke(str_name, strJson);
- defer.resolve(ret);
- } else {
- bridge.invoke(str_name, json_result, function (ret) {
- defer.resolve(ret);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- getMd5: function (data) {
- var defer = new getDefer("getMd5");
- _Bridge(function () {
- if (bridge) {
- var _json = {};
- _json.data = data;
- var str_param = JSON.stringify(_json);
- function resolve(ret) {
- var retJson = eval("(" + ret + ")");
- var retValue = "";
- if (!!retJson && !!retJson.value) {
- retValue = retJson.value;
- }
- defer.resolve(retValue);
- }
- if (isAdr) {
- var ret = window.Unicom.invoke('generateMd5', str_param);
- resolve(ret)
- } else {
- bridge.invoke("generateMd5", _json, function (ret) {
- resolve(ret)
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- getBase64: function (data, deferName) {
- var _deferName = deferName || "generateBase64";
- var defer = new getDefer(_deferName);
- _Bridge(function () {
- if (bridge) {
- var _json = {};
- _json.data = data;
- function resolve(ret) {
- var retJson = eval("(" + ret + ")");
- var retValue = "";
- if (!!retJson && !!retJson.value) {
- retValue = retJson.value;
- }
- defer.resolve(retValue);
- }
- var str_param = JSON.stringify(_json);
- if (isAdr) {
- var ret = window.Unicom.invoke('generateBase64', str_param);
- resolve(ret)
- } else {
- bridge.invoke("generateBase64", _json, function (json_msg) {
- resolve(ret)
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- getNetworkType: function () {
- var defer = new getDefer("getNetworkType", true);
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var ret = window.Unicom.invoke('getNetworkType');
- var oJson = eval("(" + ret + ")");
- defer.resolve(oJson.networkType);
- } else {
- bridge.invoke("getNetworkType", {}, function (ret) {
- var oJson = eval("(" + ret + ")");
- defer.resolve(oJson.networkType);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- receiveHollywood: function (json_msg) {
- var defer = new getDefer("receiveHollywood");
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var res = bridge.invoke('receiveHollywood', JSON.stringify(json_msg));
- defer.resolve(parseJSON(res));
- } else if (isIOS) {
- bridge.callHandler("receiveHollywood", json_msg, function (res) {
- defer.resolve(parseJSON(res));
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- unicomH5Report: function (json_param) {
- var defer = new getDefer("unicomH5Report");
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- bridge.invoke('reportOrderClickMta', JSON.stringify(json_param));
- defer.resolve(0);
- } else {
- bridge.invoke("unicomH5Report", json_param, function () {
- defer.resolve(0);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- getLoginCookie: function (json_param, func_suc) {
- var defer = new getDefer("getLoginCookie", true);
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var ret = window.Unicom.invoke('getLoginCookie');
- var oJson = eval("(" + ret + ")");
- defer.resolve(oJson.cookie);
- } else {
- bridge.invoke("getLoginCookie", {}, function (ret) {
- var oJson = eval("(" + ret + ")");
- defer.resolve(oJson.cookie);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- getDeviceToken: function (json_param, func_suc) {
- var defer = new getDefer("getDeviceToken", true);
- _Bridge(function () {
- if (bridge) {
- if (isAdr) {
- var ret = window.Unicom.invoke('getDeviceToken');
- var oJson = eval("(" + ret + ")");
- defer.resolve(oJson.deviceToken);
- } else {
- bridge.invoke("getDeviceToken", {}, function (ret) {
- var oJson = eval("(" + ret + ")");
- defer.resolve(oJson.deviceToken);
- });
- }
- } else {
- defer.reject(-1);
- }
- })
- return defer;
- },
- setMoreInfo: function (json_param, func_suc) {
- return _handlerDefaultTpl("setMoreInfo", json_param, func_suc);
- },
- openToolsDialog: function (json_param, func_suc) {
- return _handlerDefaultTpl("openToolsDialog", json_param, func_suc);
- },
- apply: function (name, json_param, func_suc) {
- return _handlerDefaultTpl(name, json_param, func_suc);
- }
- }
- var json_event = {};
- function _registerHandler(str_method, func_caller, func_suc) {
- var defer = RsyncDefer(func_suc);
- _Bridge(function (json_msg) {
- if (json_msg && json_msg.state) {
- defer.resolve({
- state: 1,
- msg: "No Bridge Applied!"
- });
- } else {
- defer.resolve({
- state: 0
- });
- TenvideoJSBridge.on(str_method, function (data, responseCallback) {
- func_caller && func_caller(data);
- (typeof responseCallback == "function") && responseCallback("SUCESS"); //ios老接口有这个回调,这里保留一下
- });
- }
- });
- return defer;
- }
- /*
- * 注册APP的回调事件
- */
- QQVideoBridge.on = function (str_event, func_suc) {
- if (!json_event[str_event]) {
- json_event[str_event] = {
- eventName: str_event,
- func: []
- };
- window[str_event] = function () {
- for (var i in json_event[str_event].func) {
- json_event[str_event].func[i].apply(null, Array.prototype.slice.call(arguments, 0));
- }
- }
- _registerHandler(str_event, window[str_event], function () {});
- }
- json_event[str_event].func.push(func_suc);
- }
- /*
- * 删除APP的回调事件
- */
- QQVideoBridge.off = function (str_event, func_suc) {
- if (!json_event[str_event]) {
- return;
- }
- if (!func_suc) {
- json_event[str_event].func = [];
- }
- for (var i = json_event[str_event].func.length - 1; i >= 0; i--) {
- if (json_event[str_event].func[i] == func_suc) {
- json_event[str_event].func.splice(i, 1);
- }
- }
- }
- /*
- * 触发事件
- */
- QQVideoBridge.trigger = function (str_event) {
- if (!json_event[str_event]) {
- return;
- }
- window[str_event].apply(null, Array.prototype.slice.call(arguments, 1));
- }
- window.QQVideoBridge = QQVideoBridge;
- })();
|