Skip to content

Commit 7d857f4

Browse files
committed
Ensure that the handling of a message on the javascript side always happens in a timeout - if you send a message back to objc in the same event loop as you received the message in, bad things happen.
1 parent d1a2e58 commit 7d857f4

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

WebViewJavascriptBridge/WebViewJavascriptBridge-template.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,20 +50,22 @@
5050
}
5151

5252
function _dispatchMessageFromObjC(message) {
53-
if (message.indexOf(_CALLBACK_MESSAGE_PREFIX) == 0) {
54-
var payload = message.replace(_CALLBACK_MESSAGE_PREFIX, '')
55-
var parsedPayload = JSON.parse(payload)
56-
var callbackName = parsedPayload[_CALLBACK_FUNCTION_KEY]
57-
var callback = _jsCallbacks[callbackName]
53+
setTimeout(function _timeoutDispatchMessageFromObjC() {
54+
if (message.indexOf(_CALLBACK_MESSAGE_PREFIX) == 0) {
55+
var payload = message.replace(_CALLBACK_MESSAGE_PREFIX, '')
56+
var parsedPayload = JSON.parse(payload)
57+
var callbackName = parsedPayload[_CALLBACK_FUNCTION_KEY]
58+
var callback = _jsCallbacks[callbackName]
5859

59-
if (callback) {
60-
callback(parsedPayload[_CALLBACK_ARGUMENTS_KEY])
60+
if (callback) {
61+
callback(parsedPayload[_CALLBACK_ARGUMENTS_KEY])
62+
} else {
63+
WebViewJavascriptBridge._messageHandler(message)
64+
}
6165
} else {
6266
WebViewJavascriptBridge._messageHandler(message)
6367
}
64-
} else {
65-
WebViewJavascriptBridge._messageHandler(message)
66-
}
68+
})
6769
}
6870

6971
function _handleMessageFromObjC(message) {

0 commit comments

Comments
 (0)