forked from illusionspaces/WKJavaScriptBridge
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWKJSBridge.js
More file actions
executable file
·57 lines (56 loc) · 2.37 KB
/
WKJSBridge.js
File metadata and controls
executable file
·57 lines (56 loc) · 2.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
;
(function (window) {
;
var WKJSBridge = /** @class */ (function () {
function WKJSBridge() {
this.uniqueId = 1;
this.callbackCache = {};
this.eventCallbackCache = {};
}
/**
* 调用 Natvie 方法
* @param service 模块
* @param action 方法
* @param actionArgs 数据
* @param callback 调用回调
*/
WKJSBridge.prototype.callNative = function (service, action, actionArgs, successCallback, failCallback) {
var message = {
service: service || 'default',
action: action,
actionArgs: actionArgs,
callbackId: null
};
if (successCallback || failCallback) {
// 拼装 callbackId
var callbackId = 'cb_' + message.service + '_' + action + '_' + (this.uniqueId++) + '_' + new Date().getTime(); // 缓存 callback,用于在 Native 处理完消息后,通知 H5
this.callbackCache[callbackId] = {success:successCallback, fail:failCallback};;
// 追加 callbackId 属性
message.callbackId = callbackId;
}
// 发送消息给 Native
window.webkit.messageHandlers.WKJSBridgeMessageName.postMessage(JSON.stringify(message));
};
/**
* 用于处理来自 Native 的消息
* @param callbackMessage 回调消息
*/
WKJSBridge.prototype._handleMessageFromNative = function (messageString) {
var callbackMessage = JSON.parse(messageString);
var status = callbackMessage.status;
var callback = this.callbackCache[callbackMessage.callbackId];
if (callback) { // 执行 callback 回调,并删除缓存的 callback
if (status == 1) {//失败回调
callback.fail(callbackMessage.data);
}else {//成功回调
callback.success(callbackMessage.data);
}
this.callbackCache[callbackMessage.callbackId] = null;
delete this.callbackCache[callbackMessage.callbackId];
}
};
return WKJSBridge;
}());
// 初始化 KKJSBridge
window.WKJSBridge = new WKJSBridge(); // 设置新的 JSBridge 作为全局对象
})(window);