/
webviewjavascriptbridge.js
executable file
·92 lines (77 loc) · 2.68 KB
/
webviewjavascriptbridge.js
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
if (window.WebViewJavascriptBridge3) {
return;
}
var messageHandlers = {};
var responseCallbacks = {};
var uniqueId = 1;
function init(messageHandler) {
if (WebViewJavascriptBridge3._messageHandler) {
throw new Error('WebViewJavascriptBridge3.init called twice');
}
WebViewJavascriptBridge3._messageHandler = messageHandler;
}
function _doSend(message, responseCallback) {
console.log("responseCallback:" + responseCallback);
if (responseCallback) {
var callbackId = 'cb_' + (uniqueId++) + '_' + new Date().getTime();
responseCallbacks[callbackId] = responseCallback;
message['callbackId'] = callbackId;
}
console.log("sending:" + JSON.stringify(message));
_WebViewJavascriptBridge._handleMessageFromJs(message.data || null, message.responseId || null,
message.responseData || null, message.callbackId || null, message.handlerName || null);
}
function send(data, responseCallback) {
_doSend({data: data}, responseCallback);
}
function registerHandler(handlerName, handler) {
messageHandlers[handlerName] = handler;
}
function callHandler(handlerName, data, responseCallback) {
_doSend({handlerName: handlerName, data: data}, responseCallback);
}
function _dispatchMessageFromJava(messageJSON) {
var message = JSON.parse(messageJSON);
var messageHandler;
if (message.responseId) {
var responseCallback = responseCallbacks[message.responseId];
if (!responseCallback) {
return;
}
responseCallback(message.responseData);
delete responseCallbacks[message.responseId];
}
else {
var responseCallback;
if (message.callbackId) {
var callbackResponseId = message.callbackId;
responseCallback = function(responseData) {
_doSend({
responseId: callbackResponseId,
responseData: responseData
});
};
}
var handler = WebViewJavascriptBridge3._messageHandler;
if (message.handlerName) {
handler = messageHandlers[message.handlerName];
}
try {
handler(message.data, responseCallback);
} catch(exception) {
if (typeof console !='undefined') {
console.log("WebViewJavascriptBridge3: WARNING: javascript handler threw.", message, exception);
}
}
}
}
function _handleMessageFromJava(messageJSON) {
_dispatchMessageFromJava(messageJSON);
}
window.WebViewJavascriptBridge3 = {
'init': init,
'send': send,
'registerHandler': registerHandler,
'callHandler': callHandler,
'_handleMessageFromJava': _handleMessageFromJava
};