@pisell/utils 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.d.ts +1 -0
- package/es/index.js +1 -0
- package/es/jsBridge/index.d.ts +106 -0
- package/es/jsBridge/index.js +18 -0
- package/es/jsBridge/regDeviceApi.d.ts +15 -0
- package/es/jsBridge/regDeviceApi.js +137 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +3 -1
- package/lib/jsBridge/index.d.ts +106 -0
- package/lib/jsBridge/index.js +50 -0
- package/lib/jsBridge/regDeviceApi.d.ts +15 -0
- package/lib/jsBridge/regDeviceApi.js +149 -0
- package/package.json +1 -1
package/es/index.d.ts
CHANGED
package/es/index.js
CHANGED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
declare type LanguageNumber = {
|
|
2
|
+
en: number;
|
|
3
|
+
zh_CN: number;
|
|
4
|
+
zh_HK: number;
|
|
5
|
+
};
|
|
6
|
+
declare type LanguageString = {
|
|
7
|
+
en: string;
|
|
8
|
+
zh_CN: string;
|
|
9
|
+
zh_HK: string;
|
|
10
|
+
} | string;
|
|
11
|
+
/**
|
|
12
|
+
* 打印小票
|
|
13
|
+
*/
|
|
14
|
+
declare type WebPrint0 = {
|
|
15
|
+
/**
|
|
16
|
+
* 打印类型
|
|
17
|
+
* 0: 小票
|
|
18
|
+
* 1:ITS备货单/划菜单
|
|
19
|
+
* 2:手环
|
|
20
|
+
*/
|
|
21
|
+
type: "0";
|
|
22
|
+
data: {
|
|
23
|
+
/** 订单ID */
|
|
24
|
+
order_id: string;
|
|
25
|
+
};
|
|
26
|
+
/** 打印语言对应的数量 */
|
|
27
|
+
language: LanguageNumber;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 打印ITS备货单/划菜单
|
|
31
|
+
*/
|
|
32
|
+
declare type WebPrint1 = {
|
|
33
|
+
/**
|
|
34
|
+
* 打印类型
|
|
35
|
+
* 0: 小票
|
|
36
|
+
* 1:ITS备货单/划菜单
|
|
37
|
+
* 2:手环
|
|
38
|
+
*/
|
|
39
|
+
type: "1";
|
|
40
|
+
data: {
|
|
41
|
+
/** 0:备货 1:划单 */
|
|
42
|
+
mode: "0" | "1";
|
|
43
|
+
resource: LanguageString;
|
|
44
|
+
/** 订单备注 */
|
|
45
|
+
order_note: string;
|
|
46
|
+
/** 订单时间或商品下单时间 */
|
|
47
|
+
time: string;
|
|
48
|
+
/** 订单编号 */
|
|
49
|
+
order_number?: string;
|
|
50
|
+
/** 商品 */
|
|
51
|
+
products: {
|
|
52
|
+
/** 商品名称 */
|
|
53
|
+
product_title: LanguageString;
|
|
54
|
+
/** 商品规格 */
|
|
55
|
+
product_option_string: LanguageString;
|
|
56
|
+
/** 商品备注 */
|
|
57
|
+
product_note: string;
|
|
58
|
+
/** 商品数量 */
|
|
59
|
+
product_quantity: number;
|
|
60
|
+
/** 加菜标识 待定 */
|
|
61
|
+
is_append?: boolean;
|
|
62
|
+
/** 退菜标识 待定 */
|
|
63
|
+
is_removed?: boolean;
|
|
64
|
+
}[];
|
|
65
|
+
};
|
|
66
|
+
/** 打印语言对应的数量 */
|
|
67
|
+
language: LanguageNumber;
|
|
68
|
+
};
|
|
69
|
+
declare type WebPrint2 = {
|
|
70
|
+
/**
|
|
71
|
+
* 打印类型
|
|
72
|
+
* 0: 小票
|
|
73
|
+
* 1:ITS备货单/划菜单
|
|
74
|
+
* 2:手环
|
|
75
|
+
*/
|
|
76
|
+
type: "2";
|
|
77
|
+
data: {
|
|
78
|
+
/** 0: 普通票 1:成人票 2:免费成人票 */
|
|
79
|
+
type: "0" | "1" | "2";
|
|
80
|
+
/** 发行编码 */
|
|
81
|
+
encoded: string;
|
|
82
|
+
/** 编码 */
|
|
83
|
+
code: string;
|
|
84
|
+
/** 到期时间 */
|
|
85
|
+
expire_date: string;
|
|
86
|
+
areas: {
|
|
87
|
+
/** 区域名字 */
|
|
88
|
+
area_name: string;
|
|
89
|
+
/** 区域代码 */
|
|
90
|
+
area_code: string;
|
|
91
|
+
/** 可用次数 */
|
|
92
|
+
limit_num: number;
|
|
93
|
+
/** 已用次数 */
|
|
94
|
+
used_num: number;
|
|
95
|
+
}[];
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
declare type WebPrintParams = WebPrint0 | WebPrint1 | WebPrint2;
|
|
99
|
+
/**
|
|
100
|
+
* webView页面中调用打印机打印
|
|
101
|
+
* 此api暂时只支持native app平台下ios手机
|
|
102
|
+
* @param params
|
|
103
|
+
* @param callback
|
|
104
|
+
*/
|
|
105
|
+
export declare function webPrint(params: WebPrintParams, callback: (...arg: any) => void): void;
|
|
106
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import regDeviceApi from "./regDeviceApi";
|
|
2
|
+
/**
|
|
3
|
+
* webView页面中调用打印机打印
|
|
4
|
+
* 此api暂时只支持native app平台下ios手机
|
|
5
|
+
* @param params
|
|
6
|
+
* @param callback
|
|
7
|
+
*/
|
|
8
|
+
export function webPrint(params, _callback) {
|
|
9
|
+
regDeviceApi().then(function (jsBridge) {
|
|
10
|
+
jsBridge.callDeviceApi({
|
|
11
|
+
apiName: "webPrint",
|
|
12
|
+
params: params,
|
|
13
|
+
callback: function callback() {
|
|
14
|
+
_callback && _callback.apply(void 0, arguments);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type ComposedJSBridge = {
|
|
2
|
+
// eslint-disable-next-line camelcase
|
|
3
|
+
callDeviceApi: (a: {
|
|
4
|
+
apiName: string;
|
|
5
|
+
callback: Functon;
|
|
6
|
+
onError?: (e: any) => void;
|
|
7
|
+
params?: any;
|
|
8
|
+
key_events?: string[];
|
|
9
|
+
}) => void;
|
|
10
|
+
calledByDevice: (a: { apiName: string; callback: Functon }) => void;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const regDeviceApi: () => Promise<ComposedJSBridge>;
|
|
14
|
+
|
|
15
|
+
export default regDeviceApi;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { isAndroid, isIos } from "../platform";
|
|
2
|
+
var androidRegStatus = false;
|
|
3
|
+
var iosRegStatus = false;
|
|
4
|
+
var androidBridge;
|
|
5
|
+
var iosBridge;
|
|
6
|
+
var composedBridge;
|
|
7
|
+
function regIosJsBridge(callback) {
|
|
8
|
+
if (window.WebViewJavascriptBridge) {
|
|
9
|
+
callback(window.WebViewJavascriptBridge);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (window.WVJBCallbacks) {
|
|
13
|
+
window.WVJBCallbacks.push(callback);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
window.WVJBCallbacks = [callback];
|
|
17
|
+
var WVJBIframe = document.createElement('iframe');
|
|
18
|
+
WVJBIframe.style.display = 'none';
|
|
19
|
+
WVJBIframe.src = 'https://__bridge_loaded__';
|
|
20
|
+
document.documentElement && document.documentElement.appendChild(WVJBIframe);
|
|
21
|
+
setTimeout(function () {
|
|
22
|
+
try {
|
|
23
|
+
document.documentElement && document.documentElement.removeChild(WVJBIframe);
|
|
24
|
+
} catch (e) {
|
|
25
|
+
console.log(e);
|
|
26
|
+
}
|
|
27
|
+
}, 0);
|
|
28
|
+
}
|
|
29
|
+
function regAndroidJsBridge(extraInit) {
|
|
30
|
+
if (window._jsBridge) {
|
|
31
|
+
extraInit(window._jsBridge);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
document.addEventListener('WebViewJavascriptBridgeReady', function (event) {
|
|
35
|
+
var bridge = event.bridge;
|
|
36
|
+
window._jsBridge = bridge;
|
|
37
|
+
if (!bridge) return;
|
|
38
|
+
// 这段代码不能删除
|
|
39
|
+
bridge.init(function (message, responseCallback) {
|
|
40
|
+
if (responseCallback) {
|
|
41
|
+
responseCallback('init responseCallback');
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
extraInit(bridge);
|
|
45
|
+
}, false);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* 通用jsBridge
|
|
50
|
+
* @param deviceType
|
|
51
|
+
*/
|
|
52
|
+
function getComposedBridge(deviceType) {
|
|
53
|
+
if (composedBridge) {
|
|
54
|
+
return composedBridge;
|
|
55
|
+
}
|
|
56
|
+
composedBridge = {
|
|
57
|
+
// 主动调用设备的方法
|
|
58
|
+
callDeviceApi: function callDeviceApi(_ref) {
|
|
59
|
+
var apiName = _ref.apiName,
|
|
60
|
+
inCb = _ref.callback,
|
|
61
|
+
_ref$params = _ref.params,
|
|
62
|
+
params = _ref$params === void 0 ? {} : _ref$params,
|
|
63
|
+
onError = _ref.onError;
|
|
64
|
+
var callback = function callback(res) {
|
|
65
|
+
var result = res;
|
|
66
|
+
try {
|
|
67
|
+
result = JSON.parse(res);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.log("error ".concat(apiName), error);
|
|
70
|
+
}
|
|
71
|
+
if (result.code || result.code === 0) {
|
|
72
|
+
// 强转字符串,兼容安卓的number
|
|
73
|
+
result.code = "".concat(result.code);
|
|
74
|
+
}
|
|
75
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
76
|
+
args[_key - 1] = arguments[_key];
|
|
77
|
+
}
|
|
78
|
+
inCb.apply(void 0, [result].concat(args));
|
|
79
|
+
};
|
|
80
|
+
if (deviceType === 'iphone') {
|
|
81
|
+
iosBridge.callHandler(apiName, params, callback, function (e) {
|
|
82
|
+
console.log(e, '--- 调用ios api报错:', apiName);
|
|
83
|
+
if (onError) {
|
|
84
|
+
onError(e);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
} else if (deviceType === 'android') {
|
|
88
|
+
androidBridge.callHandler(apiName, params, callback, function (e) {
|
|
89
|
+
console.log(e, '--- 调用android api报错:', apiName);
|
|
90
|
+
if (onError) {
|
|
91
|
+
onError(e);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
} else {
|
|
95
|
+
console.log('--- 没获取到js bridge ---');
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
// 被设备调用的方法
|
|
99
|
+
calledByDevice: function calledByDevice(_ref2) {
|
|
100
|
+
var apiName = _ref2.apiName,
|
|
101
|
+
callback = _ref2.callback;
|
|
102
|
+
if (deviceType === 'iphone') {
|
|
103
|
+
iosBridge.registerHandler(apiName, callback);
|
|
104
|
+
} else if (deviceType === 'android') {
|
|
105
|
+
androidBridge.registerHandler(apiName, callback);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
return composedBridge;
|
|
110
|
+
}
|
|
111
|
+
export default function regDeviceApi() {
|
|
112
|
+
return new Promise(function (resolve, reject) {
|
|
113
|
+
if (isIos() && !iosRegStatus) {
|
|
114
|
+
regIosJsBridge(function (bridge) {
|
|
115
|
+
iosRegStatus = true;
|
|
116
|
+
iosBridge = bridge;
|
|
117
|
+
var realBridge = getComposedBridge('iphone');
|
|
118
|
+
resolve(realBridge);
|
|
119
|
+
});
|
|
120
|
+
} else if (isIos() && iosRegStatus) {
|
|
121
|
+
var realBridge = getComposedBridge('iphone');
|
|
122
|
+
resolve(realBridge);
|
|
123
|
+
} else if (isAndroid() && !androidRegStatus) {
|
|
124
|
+
regAndroidJsBridge(function (bridge) {
|
|
125
|
+
androidBridge = bridge;
|
|
126
|
+
androidRegStatus = true;
|
|
127
|
+
var realBridge = getComposedBridge('android');
|
|
128
|
+
resolve(realBridge);
|
|
129
|
+
});
|
|
130
|
+
} else if (isAndroid() && androidRegStatus) {
|
|
131
|
+
var _realBridge = getComposedBridge('android');
|
|
132
|
+
resolve(_realBridge);
|
|
133
|
+
} else {
|
|
134
|
+
reject();
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -24,6 +24,7 @@ __reExport(src_exports, require("./platform"), module.exports);
|
|
|
24
24
|
__reExport(src_exports, require("./log"), module.exports);
|
|
25
25
|
__reExport(src_exports, require("./format"), module.exports);
|
|
26
26
|
__reExport(src_exports, require("./escPosPrinter"), module.exports);
|
|
27
|
+
__reExport(src_exports, require("./jsBridge"), module.exports);
|
|
27
28
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
29
|
0 && (module.exports = {
|
|
29
30
|
...require("./otherUtils"),
|
|
@@ -33,5 +34,6 @@ __reExport(src_exports, require("./escPosPrinter"), module.exports);
|
|
|
33
34
|
...require("./platform"),
|
|
34
35
|
...require("./log"),
|
|
35
36
|
...require("./format"),
|
|
36
|
-
...require("./escPosPrinter")
|
|
37
|
+
...require("./escPosPrinter"),
|
|
38
|
+
...require("./jsBridge")
|
|
37
39
|
});
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
declare type LanguageNumber = {
|
|
2
|
+
en: number;
|
|
3
|
+
zh_CN: number;
|
|
4
|
+
zh_HK: number;
|
|
5
|
+
};
|
|
6
|
+
declare type LanguageString = {
|
|
7
|
+
en: string;
|
|
8
|
+
zh_CN: string;
|
|
9
|
+
zh_HK: string;
|
|
10
|
+
} | string;
|
|
11
|
+
/**
|
|
12
|
+
* 打印小票
|
|
13
|
+
*/
|
|
14
|
+
declare type WebPrint0 = {
|
|
15
|
+
/**
|
|
16
|
+
* 打印类型
|
|
17
|
+
* 0: 小票
|
|
18
|
+
* 1:ITS备货单/划菜单
|
|
19
|
+
* 2:手环
|
|
20
|
+
*/
|
|
21
|
+
type: "0";
|
|
22
|
+
data: {
|
|
23
|
+
/** 订单ID */
|
|
24
|
+
order_id: string;
|
|
25
|
+
};
|
|
26
|
+
/** 打印语言对应的数量 */
|
|
27
|
+
language: LanguageNumber;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* 打印ITS备货单/划菜单
|
|
31
|
+
*/
|
|
32
|
+
declare type WebPrint1 = {
|
|
33
|
+
/**
|
|
34
|
+
* 打印类型
|
|
35
|
+
* 0: 小票
|
|
36
|
+
* 1:ITS备货单/划菜单
|
|
37
|
+
* 2:手环
|
|
38
|
+
*/
|
|
39
|
+
type: "1";
|
|
40
|
+
data: {
|
|
41
|
+
/** 0:备货 1:划单 */
|
|
42
|
+
mode: "0" | "1";
|
|
43
|
+
resource: LanguageString;
|
|
44
|
+
/** 订单备注 */
|
|
45
|
+
order_note: string;
|
|
46
|
+
/** 订单时间或商品下单时间 */
|
|
47
|
+
time: string;
|
|
48
|
+
/** 订单编号 */
|
|
49
|
+
order_number?: string;
|
|
50
|
+
/** 商品 */
|
|
51
|
+
products: {
|
|
52
|
+
/** 商品名称 */
|
|
53
|
+
product_title: LanguageString;
|
|
54
|
+
/** 商品规格 */
|
|
55
|
+
product_option_string: LanguageString;
|
|
56
|
+
/** 商品备注 */
|
|
57
|
+
product_note: string;
|
|
58
|
+
/** 商品数量 */
|
|
59
|
+
product_quantity: number;
|
|
60
|
+
/** 加菜标识 待定 */
|
|
61
|
+
is_append?: boolean;
|
|
62
|
+
/** 退菜标识 待定 */
|
|
63
|
+
is_removed?: boolean;
|
|
64
|
+
}[];
|
|
65
|
+
};
|
|
66
|
+
/** 打印语言对应的数量 */
|
|
67
|
+
language: LanguageNumber;
|
|
68
|
+
};
|
|
69
|
+
declare type WebPrint2 = {
|
|
70
|
+
/**
|
|
71
|
+
* 打印类型
|
|
72
|
+
* 0: 小票
|
|
73
|
+
* 1:ITS备货单/划菜单
|
|
74
|
+
* 2:手环
|
|
75
|
+
*/
|
|
76
|
+
type: "2";
|
|
77
|
+
data: {
|
|
78
|
+
/** 0: 普通票 1:成人票 2:免费成人票 */
|
|
79
|
+
type: "0" | "1" | "2";
|
|
80
|
+
/** 发行编码 */
|
|
81
|
+
encoded: string;
|
|
82
|
+
/** 编码 */
|
|
83
|
+
code: string;
|
|
84
|
+
/** 到期时间 */
|
|
85
|
+
expire_date: string;
|
|
86
|
+
areas: {
|
|
87
|
+
/** 区域名字 */
|
|
88
|
+
area_name: string;
|
|
89
|
+
/** 区域代码 */
|
|
90
|
+
area_code: string;
|
|
91
|
+
/** 可用次数 */
|
|
92
|
+
limit_num: number;
|
|
93
|
+
/** 已用次数 */
|
|
94
|
+
used_num: number;
|
|
95
|
+
}[];
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
declare type WebPrintParams = WebPrint0 | WebPrint1 | WebPrint2;
|
|
99
|
+
/**
|
|
100
|
+
* webView页面中调用打印机打印
|
|
101
|
+
* 此api暂时只支持native app平台下ios手机
|
|
102
|
+
* @param params
|
|
103
|
+
* @param callback
|
|
104
|
+
*/
|
|
105
|
+
export declare function webPrint(params: WebPrintParams, callback: (...arg: any) => void): void;
|
|
106
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/jsBridge/index.ts
|
|
30
|
+
var jsBridge_exports = {};
|
|
31
|
+
__export(jsBridge_exports, {
|
|
32
|
+
webPrint: () => webPrint
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(jsBridge_exports);
|
|
35
|
+
var import_regDeviceApi = __toESM(require("./regDeviceApi"));
|
|
36
|
+
function webPrint(params, callback) {
|
|
37
|
+
(0, import_regDeviceApi.default)().then((jsBridge) => {
|
|
38
|
+
jsBridge.callDeviceApi({
|
|
39
|
+
apiName: "webPrint",
|
|
40
|
+
params,
|
|
41
|
+
callback: (...arg) => {
|
|
42
|
+
callback && callback(...arg);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
48
|
+
0 && (module.exports = {
|
|
49
|
+
webPrint
|
|
50
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
type ComposedJSBridge = {
|
|
2
|
+
// eslint-disable-next-line camelcase
|
|
3
|
+
callDeviceApi: (a: {
|
|
4
|
+
apiName: string;
|
|
5
|
+
callback: Functon;
|
|
6
|
+
onError?: (e: any) => void;
|
|
7
|
+
params?: any;
|
|
8
|
+
key_events?: string[];
|
|
9
|
+
}) => void;
|
|
10
|
+
calledByDevice: (a: { apiName: string; callback: Functon }) => void;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const regDeviceApi: () => Promise<ComposedJSBridge>;
|
|
14
|
+
|
|
15
|
+
export default regDeviceApi;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/jsBridge/regDeviceApi.js
|
|
20
|
+
var regDeviceApi_exports = {};
|
|
21
|
+
__export(regDeviceApi_exports, {
|
|
22
|
+
default: () => regDeviceApi
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(regDeviceApi_exports);
|
|
25
|
+
var import_platform = require("../platform");
|
|
26
|
+
var androidRegStatus = false;
|
|
27
|
+
var iosRegStatus = false;
|
|
28
|
+
var androidBridge;
|
|
29
|
+
var iosBridge;
|
|
30
|
+
var composedBridge;
|
|
31
|
+
function regIosJsBridge(callback) {
|
|
32
|
+
if (window.WebViewJavascriptBridge) {
|
|
33
|
+
callback(window.WebViewJavascriptBridge);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (window.WVJBCallbacks) {
|
|
37
|
+
window.WVJBCallbacks.push(callback);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
window.WVJBCallbacks = [callback];
|
|
41
|
+
const WVJBIframe = document.createElement("iframe");
|
|
42
|
+
WVJBIframe.style.display = "none";
|
|
43
|
+
WVJBIframe.src = "https://__bridge_loaded__";
|
|
44
|
+
document.documentElement && document.documentElement.appendChild(WVJBIframe);
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
try {
|
|
47
|
+
document.documentElement && document.documentElement.removeChild(WVJBIframe);
|
|
48
|
+
} catch (e) {
|
|
49
|
+
console.log(e);
|
|
50
|
+
}
|
|
51
|
+
}, 0);
|
|
52
|
+
}
|
|
53
|
+
function regAndroidJsBridge(extraInit) {
|
|
54
|
+
if (window._jsBridge) {
|
|
55
|
+
extraInit(window._jsBridge);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
document.addEventListener(
|
|
59
|
+
"WebViewJavascriptBridgeReady",
|
|
60
|
+
(event) => {
|
|
61
|
+
const { bridge } = event;
|
|
62
|
+
window._jsBridge = bridge;
|
|
63
|
+
if (!bridge)
|
|
64
|
+
return;
|
|
65
|
+
bridge.init((message, responseCallback) => {
|
|
66
|
+
if (responseCallback) {
|
|
67
|
+
responseCallback("init responseCallback");
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
extraInit(bridge);
|
|
71
|
+
},
|
|
72
|
+
false
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
function getComposedBridge(deviceType) {
|
|
76
|
+
if (composedBridge) {
|
|
77
|
+
return composedBridge;
|
|
78
|
+
}
|
|
79
|
+
composedBridge = {
|
|
80
|
+
// 主动调用设备的方法
|
|
81
|
+
callDeviceApi: ({ apiName, callback: inCb, params = {}, onError }) => {
|
|
82
|
+
const callback = (res, ...args) => {
|
|
83
|
+
let result = res;
|
|
84
|
+
try {
|
|
85
|
+
result = JSON.parse(res);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
console.log(`error ${apiName}`, error);
|
|
88
|
+
}
|
|
89
|
+
if (result.code || result.code === 0) {
|
|
90
|
+
result.code = `${result.code}`;
|
|
91
|
+
}
|
|
92
|
+
inCb(result, ...args);
|
|
93
|
+
};
|
|
94
|
+
if (deviceType === "iphone") {
|
|
95
|
+
iosBridge.callHandler(apiName, params, callback, (e) => {
|
|
96
|
+
console.log(e, "--- \u8C03\u7528ios api\u62A5\u9519\uFF1A", apiName);
|
|
97
|
+
if (onError) {
|
|
98
|
+
onError(e);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
} else if (deviceType === "android") {
|
|
102
|
+
androidBridge.callHandler(apiName, params, callback, (e) => {
|
|
103
|
+
console.log(e, "--- \u8C03\u7528android api\u62A5\u9519\uFF1A", apiName);
|
|
104
|
+
if (onError) {
|
|
105
|
+
onError(e);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
} else {
|
|
109
|
+
console.log("--- \u6CA1\u83B7\u53D6\u5230js bridge ---");
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
// 被设备调用的方法
|
|
113
|
+
calledByDevice: ({ apiName, callback }) => {
|
|
114
|
+
if (deviceType === "iphone") {
|
|
115
|
+
iosBridge.registerHandler(apiName, callback);
|
|
116
|
+
} else if (deviceType === "android") {
|
|
117
|
+
androidBridge.registerHandler(apiName, callback);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
return composedBridge;
|
|
122
|
+
}
|
|
123
|
+
function regDeviceApi() {
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
if ((0, import_platform.isIos)() && !iosRegStatus) {
|
|
126
|
+
regIosJsBridge((bridge) => {
|
|
127
|
+
iosRegStatus = true;
|
|
128
|
+
iosBridge = bridge;
|
|
129
|
+
const realBridge = getComposedBridge("iphone");
|
|
130
|
+
resolve(realBridge);
|
|
131
|
+
});
|
|
132
|
+
} else if ((0, import_platform.isIos)() && iosRegStatus) {
|
|
133
|
+
const realBridge = getComposedBridge("iphone");
|
|
134
|
+
resolve(realBridge);
|
|
135
|
+
} else if ((0, import_platform.isAndroid)() && !androidRegStatus) {
|
|
136
|
+
regAndroidJsBridge((bridge) => {
|
|
137
|
+
androidBridge = bridge;
|
|
138
|
+
androidRegStatus = true;
|
|
139
|
+
const realBridge = getComposedBridge("android");
|
|
140
|
+
resolve(realBridge);
|
|
141
|
+
});
|
|
142
|
+
} else if ((0, import_platform.isAndroid)() && androidRegStatus) {
|
|
143
|
+
const realBridge = getComposedBridge("android");
|
|
144
|
+
resolve(realBridge);
|
|
145
|
+
} else {
|
|
146
|
+
reject();
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|