| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373 |
- var ANDROID = 1;
- var IOS = 2;
- var curApp = "";
- var ua = window.navigator.userAgent.toLowerCase();
- if (/android/.test(ua)) {
- curApp = ANDROID;
- } else if (/(iphone|ipad|ipod|ios)/.test(ua)) {
- curApp = IOS;
- } else {
- document.write("curApp => 其他类型 => " + ua);
- }
- if (curApp === ANDROID) {
- var bridge = {
- //default:this,
- call: function (b, a, c) {
- var e = "";
- "function" == typeof a && ((c = a), (a = {}));
- a = {
- data: void 0 === a ? null : a,
- };
- if ("function" == typeof c) {
- var g = "dscb" + window.dscb++;
- window[g] = c;
- a._dscbstub = g;
- }
- a = JSON.stringify(a);
- if (window._dsbridge) e = _dsbridge.call(b, a);
- else if (window._dswk || -1 != navigator.userAgent.indexOf("_dsbridge"))
- e = prompt("_dsbridge=" + b, a);
- return JSON.parse(e || "{}").data;
- },
- register: function (b, a, c) {
- c = c ? window._dsaf : window._dsf;
- window._dsInit ||
- ((window._dsInit = !0),
- setTimeout(function () {
- bridge.call("_dsb.dsinit");
- }, 0));
- "object" == typeof a ? (c._obs[b] = a) : (c[b] = a);
- },
- registerAsyn: function (b, a) {
- this.register(b, a, !0);
- },
- hasNativeMethod: function (b, a) {
- return this.call("_dsb.hasNativeMethod", {
- name: b,
- type: a || "all",
- });
- },
- disableJavascriptDialogBlock: function (b) {
- this.call("_dsb.disableJavascriptDialogBlock", {
- disable: !1 !== b,
- });
- },
- };
- !(function () {
- //!function "执行"
- if (!window._dsf) {
- var b = {
- _dsf: {
- _obs: {},
- },
- _dsaf: {
- _obs: {},
- },
- dscb: 0,
- dsBridge: bridge,
- close: function () {
- bridge.call("_dsb.closePage");
- },
- _handleMessageFromNative: function (a) {
- var e = JSON.parse(a.data),
- b = {
- id: a.callbackId,
- complete: !0,
- },
- c = this._dsf[a.method],
- d = this._dsaf[a.method],
- h = function (a, c) {
- b.data = a.apply(c, e);
- bridge.call("_dsb.returnValue", b);
- },
- k = function (a, c) {
- e.push(function (a, c) {
- b.data = a;
- b.complete = !1 !== c;
- bridge.call("_dsb.returnValue", b);
- });
- a.apply(c, e);
- };
- if (c) h(c, this._dsf);
- else if (d) k(d, this._dsaf);
- else if (((c = a.method.split(".")), !(2 > c.length))) {
- a = c.pop();
- var c = c.join("."),
- d = this._dsf._obs,
- d = d[c] || {},
- f = d[a];
- f && "function" == typeof f
- ? h(f, d)
- : ((d = this._dsaf._obs),
- (d = d[c] || {}),
- (f = d[a]) && "function" == typeof f && k(f, d));
- }
- },
- },
- a;
- for (a in b) window[a] = b[a];
- bridge.register("_hasJavascriptMethod", function (a, b) {
- b = a.split(".");
- if (2 > b.length) return !(!_dsf[b] && !_dsaf[b]);
- a = b.pop();
- b = b.join(".");
- return (b = _dsf._obs[b] || _dsaf._obs[b]) && !!b[a];
- });
- }
- })();
- } else if (curApp == IOS) {
- var jsBridge = function (bridgeName, bridgeScheme) {
- this.bridgeName = bridgeName || "WebViewJavascriptBridge";
- this.bridgeScheme = bridgeScheme || "https";
- var ua = navigator.userAgent || navigator.vendor || window.opera;
- var ANDROID = 1;
- var IOS = 2;
- var SUCCESS_CODE = 0;
- ua = ua.toLowerCase();
- if (/android/.test(ua)) {
- this.app = ANDROID;
- } else if (/(iphone|ipad|ipod|ios)/.test(ua)) {
- this.app = IOS;
- }
- /* 获取 bridge */
- this.getBridge = function (callback) {
- if (window[this.bridgeName]) {
- callback(window[this.bridgeName]);
- return;
- }
- if (this.app === ANDROID) {
- document.addEventListener(
- "WebViewJavascriptBridgeReady",
- function () {
- callback(window[this.bridgeName]);
- },
- false
- );
- } else if (this.app === IOS) {
- // WebViewJavascriptBridge 由native在注入
- // https://github.com/marcuswestin/WebViewJavascriptBridge
- 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);
- }
- };
- /**
- * 给ios和android注册事件监听
- *
- * @memberof jsBridge
- */
- this.on = function (event, jsHandler) {
- this.registHandler(event, jsHandler);
- };
- /**
- * 默认监听事件
- *
- * @memberof jsBridge
- */
- this.registDefaultHandlerForApp = function () {
- this.on("reload", function () {
- location.reload();
- });
- };
- /**
- * 注册事件逻辑
- *
- * @memberof jsBridge
- */
- this.registHandler = function (event, jsHandler) {
- this.getBridge(function (bridge) {
- if (
- bridge &&
- bridge.registerHandler &&
- typeof bridge.registerHandler === "function"
- ) {
- bridge.registerHandler(event, function (data2js, responseCallback) {
- responseCallback = responseCallback || function () {};
- jsHandler(data2js, responseCallback);
- });
- }
- });
- };
- /**
- * 调用 app
- * @param {string} event
- * @param {object} params
- * @param {fun} callback
- * @return JSON对象
- */
- this.callHandler = function (event, params, callback) {
- this.getBridge(function (bridge) {
- if (
- bridge &&
- bridge.registerHandler &&
- typeof bridge.registerHandler === "function"
- ) {
- bridge.callHandler(event, params, callback);
- }
- });
- };
- this.registDefaultHandlerForApp();
- return this;
- };
- }
- if (!jsBridge) {
- jsBridge = function () {};
- }
- jsBridge.prototype.curApp = curApp;
- /**
- * 扫码
- */
- jsBridge.prototype.scanQRCode = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("scanQRCode", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("scanQRCode", params, success);
- }
- };
- /**
- * 获取BTY地址
- */
- jsBridge.prototype.getCurrentBTYAddress = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("getCurrentBTYAddress", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("getCurrentBTYAddress", params, success);
- }
- };
- /**
- * 获取所有币种的地址:getAddress
- * 入参:cointype为BTC,ETH,TRX,BTY等主链
- */
- jsBridge.prototype.getAddress = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("getAddress", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("getAddress", params, success);
- }
- };
- /**
- * 设置标题
- */
- jsBridge.prototype.setTitle = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("setTitle", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("setTitle", params, success);
- }
- };
- /**
- * 获取当前语言
- */
- jsBridge.prototype.getLang = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("getLang", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("getLang", params, success);
- }
- };
- /**
- * 返回上一个网页
- */
- jsBridge.prototype.closeCurrentWebview = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("closeCurrentWebview", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("closeCurrentWebview", params, success);
- }
- };
- /**
- * 获取设备id:getDeviceId
- */
- jsBridge.prototype.getDeviceId = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("getDeviceId", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("getDeviceId", params, success);
- }
- };
- /**
- * 跳转钱包 gotoWallet
- */
- jsBridge.prototype.gotoWallet = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("gotoWallet", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("gotoWallet", params, success);
- }
- };
- /**
- * 微信分享
- */
- jsBridge.prototype.wechatShare = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("wechatShare", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("wechatShare", params, success);
- }
- };
- /**
- * 构造数据:create
- */
- jsBridge.prototype.create = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("create", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("create", params, success);
- }
- };
- /**
- * 普通签名:sign
- */
- jsBridge.prototype.sign = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("sign", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("sign", params, success);
- }
- };
- /**
- * 交易组签名:signTxGroup
- * 入参:交易组只支持BTY
- */
- jsBridge.prototype.signTxGroup = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("signTxGroup", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("signTxGroup", params, success);
- }
- };
- /**
- * 发送交易:send
- * cointype为BTC,ETH,TRX,BTY等主链
- */
- jsBridge.prototype.send = function (params, success) {
- if (this.curApp == ANDROID) {
- dsBridge.call("send", params, success);
- } else if (this.curApp == IOS) {
- this.callHandler("send", params, success);
- }
- };
- //=====================================================================================
- //==================================增加新的应用方法====================================
- //=====================================================================================
- if (/wallet/.test(ua)) {
- console.log("在钱包环境");
- } else {
- console.log("不是在钱包环境");
- }
- //export default new jsBridge();
- var jsBridge = new jsBridge();
|