@@ -22,21 +22,15 @@ let WKWebViewJavascriptBridgeJS = """
2222 window.WKWebViewJavascriptBridge = {
2323 registerHandler: registerHandler,
2424 callHandler: callHandler,
25- disableJavscriptAlertBoxSafetyTimeout: disableJavscriptAlertBoxSafetyTimeout,
2625 _fetchQueue: _fetchQueue,
2726 _handleMessageFromiOS: _handleMessageFromiOS
2827 };
2928
30- var messagingIframe;
3129 var sendMessageQueue = [];
3230 var messageHandlers = {};
3331
34- var CUSTOM_PROTOCOL_SCHEME = 'https';
35- var QUEUE_HAS_MESSAGE = '__wvjb_queue_message__';
36-
3732 var responseCallbacks = {};
3833 var uniqueId = 1;
39- var dispatchMessagesWithTimeoutSafety = true;
4034
4135 function registerHandler(handlerName, handler) {
4236 messageHandlers[handlerName] = handler;
@@ -49,18 +43,15 @@ let WKWebViewJavascriptBridgeJS = """
4943 }
5044 _doSend({ handlerName:handlerName, data:data }, responseCallback);
5145 }
52- function disableJavscriptAlertBoxSafetyTimeout() {
53- dispatchMessagesWithTimeoutSafety = false;
54- }
5546
5647 function _doSend(message, responseCallback) {
5748 if (responseCallback) {
58- var callbackId = 'cb_'+(uniqueId++)+'_'+new Date().getTime();
59- responseCallbacks[callbackId ] = responseCallback;
60- message['callbackId '] = callbackId ;
49+ var callbackID = 'cb_'+(uniqueId++)+'_'+new Date().getTime();
50+ responseCallbacks[callbackID ] = responseCallback;
51+ message['callbackID '] = callbackID ;
6152 }
6253 sendMessageQueue.push(message);
63- messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE;
54+ window.webkit.messageHandlers.iOS_Native_FlushMessageQueue.postMessage(null)
6455 }
6556
6657 function _fetchQueue() {
@@ -70,38 +61,30 @@ let WKWebViewJavascriptBridgeJS = """
7061 }
7162
7263 function _dispatchMessageFromiOS(messageJSON) {
73- if (dispatchMessagesWithTimeoutSafety) {
74- setTimeout(_doDispatchMessageFromiOS);
64+ var message = JSON.parse(messageJSON);
65+ var messageHandler;
66+ var responseCallback;
67+
68+ if (message.responseID) {
69+ responseCallback = responseCallbacks[message.responseID];
70+ if (!responseCallback) {
71+ return;
72+ }
73+ responseCallback(message.responseData);
74+ delete responseCallbacks[message.responseID];
7575 } else {
76- _doDispatchMessageFromiOS();
77- }
78-
79- function _doDispatchMessageFromiOS() {
80- var message = JSON.parse(messageJSON);
81- var messageHandler;
82- var responseCallback;
76+ if (message.callbackID) {
77+ var callbackResponseId = message.callbackID;
78+ responseCallback = function(responseData) {
79+ _doSend({ handlerName:message.handlerName, responseID:callbackResponseId, responseData:responseData });
80+ };
81+ }
8382
84- if (message.responseId) {
85- responseCallback = responseCallbacks[message.responseId];
86- if (!responseCallback) {
87- return;
88- }
89- responseCallback(message.responseData);
90- delete responseCallbacks[message.responseId];
83+ var handler = messageHandlers[message.handlerName];
84+ if (!handler) {
85+ console.log( " WKWebViewJavascriptBridge: WARNING: no handler for message from iOS: " , message);
9186 } else {
92- if (message.callbackId) {
93- var callbackResponseId = message.callbackId;
94- responseCallback = function(responseData) {
95- _doSend({ handlerName:message.handlerName, responseId:callbackResponseId, responseData:responseData });
96- };
97- }
98-
99- var handler = messageHandlers[message.handlerName];
100- if (!handler) {
101- console.log( " WKWebViewJavascriptBridge: WARNING: no handler for message from ObjC: " , message);
102- } else {
103- handler(message.data, responseCallback);
104- }
87+ handler(message.data, responseCallback);
10588 }
10689 }
10790 }
@@ -110,18 +93,11 @@ let WKWebViewJavascriptBridgeJS = """
11093 _dispatchMessageFromiOS(messageJSON);
11194 }
11295
113- messagingIframe = document.createElement('iframe');
114- messagingIframe.style.display = 'none';
115- messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE;
116- document.documentElement.appendChild(messagingIframe);
117-
118- registerHandler( " _disableJavascriptAlertBoxSafetyTimeout " , disableJavscriptAlertBoxSafetyTimeout);
119-
12096 setTimeout(_callWVJBCallbacks, 0);
12197 function _callWVJBCallbacks() {
122- var callbacks = window.WVJBCallbacks ;
123- delete window.WVJBCallbacks ;
124- for (var i= 0; i< callbacks.length; i++) {
98+ var callbacks = window.WKWVJBCallbacks ;
99+ delete window.WKWVJBCallbacks ;
100+ for (var i = 0; i < callbacks.length; i++) {
125101 callbacks[i](WKWebViewJavascriptBridge);
126102 }
127103 }
0 commit comments