Skip to content

Commit 9c2bdd0

Browse files
vontiomarcuswestin
authored andcommitted
* show js error msg and line number if use try catch, user will not know what cause error * show js error msg and line number * fix indent,alert to console.log * notify which js handler response easier for debug
1 parent 7952c49 commit 9c2bdd0

3 files changed

Lines changed: 16 additions & 10 deletions

File tree

WebViewJavascriptBridge/WebViewJavascriptBridgeBase.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#define kCustomProtocolScheme @"wvjbscheme"
1111
#define kQueueHasMessage @"__WVJB_QUEUE_MESSAGE__"
1212
#define kBridgeLoaded @"__BRIDGE_LOADED__"
13+
#define kJavascriptResponse @"__JAVASCRIPT_RESPONSE__"
1314

1415
typedef void (^WVJBResponseCallback)(id responseData);
1516
typedef void (^WVJBHandler)(id data, WVJBResponseCallback responseCallback);
@@ -41,4 +42,4 @@ typedef NSDictionary WVJBMessage;
4142
- (NSString *)webViewJavascriptCheckCommand;
4243
- (NSString *)webViewJavascriptFetchQueyCommand;
4344

44-
@end
45+
@end

WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ - (void)flushMessageQueue:(NSString *)messageQueueString{
7676

7777
NSString* responseId = message[@"responseId"];
7878
if (responseId) {
79+
[[NSNotificationCenter defaultCenter] postNotificationName: kJavascriptResponse object: self userInfo:message];
7980
WVJBResponseCallback responseCallback = _responseCallbacks[responseId];
8081
responseCallback(message[@"responseData"]);
8182
[self.responseCallbacks removeObjectForKey:responseId];
@@ -211,4 +212,4 @@ - (void)_log:(NSString *)action json:(id)json {
211212
}
212213
}
213214

214-
@end
215+
@end

WebViewJavascriptBridge/WebViewJavascriptBridge_JS.m

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,12 @@
1919
if (window.WebViewJavascriptBridge) {
2020
return;
2121
}
22+
23+
if (!window.onerror) {
24+
window.onerror = function(msg, url, line) {
25+
console.log("WebViewJavascriptBridge: ERROR:" + msg + "@" + url + ":" + line);
26+
}
27+
}
2228
window.WebViewJavascriptBridge = {
2329
registerHandler: registerHandler,
2430
callHandler: callHandler,
@@ -81,25 +87,23 @@ function _dispatchMessageFromObjC(messageJSON) {
8187
if (message.callbackId) {
8288
var callbackResponseId = message.callbackId;
8389
responseCallback = function(responseData) {
84-
_doSend({ responseId:callbackResponseId, responseData:responseData });
90+
_doSend({handlerName:message.handlerName, responseId:callbackResponseId, responseData:responseData });
8591
};
8692
}
8793

8894
var handler = messageHandlers[message.handlerName];
89-
try {
90-
handler(message.data, responseCallback);
91-
} catch(exception) {
92-
console.log("WebViewJavascriptBridge: WARNING: javascript handler threw.", message, exception);
93-
}
9495
if (!handler) {
9596
console.log("WebViewJavascriptBridge: WARNING: no handler for message from ObjC:", message);
97+
}else
98+
{
99+
handler(message.data, responseCallback);
96100
}
97101
}
98102
});
99103
}
100104

101105
function _handleMessageFromObjC(messageJSON) {
102-
_dispatchMessageFromObjC(messageJSON);
106+
_dispatchMessageFromObjC(messageJSON);
103107
}
104108

105109
messagingIframe = document.createElement('iframe');
@@ -120,4 +124,4 @@ function _callWVJBCallbacks() {
120124

121125
#undef __wvjb_js_func__
122126
return preprocessorJSCode;
123-
};
127+
};

0 commit comments

Comments
 (0)