Skip to content

Commit 8ce62ac

Browse files
committed
add js code to WKWebViewJavascriptBridgeJS.swift and injectJavascriptFile
1 parent bd56145 commit 8ce62ac

2 files changed

Lines changed: 29 additions & 54 deletions

File tree

WKWebViewJavascriptBridge/WKWebViewJavascriptBridge.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,7 @@ extension WKWebViewJavascriptBridge: WKWebViewJavascriptBridgeBaseDelegate {
6363
extension WKWebViewJavascriptBridge: WKScriptMessageHandler {
6464
public func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
6565
if message.name == iOS_Native_InjectJavascript {
66-
// base.injectJavascriptFile()
67-
print("base.injectJavascriptFile()")
66+
base.injectJavascriptFile()
6867
}
6968

7069
if message.name == iOS_Native_FlushMessageQueue {

WKWebViewJavascriptBridge/WKWebViewJavascriptBridgeJS.swift

Lines changed: 28 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)