Skip to content

Commit 0edcf7f

Browse files
committed
Merge https://github.com/jberkman/WebViewJavascriptBridge into jberkman-json-encoding
2 parents 1df2260 + 2f129da commit 0edcf7f

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

WebViewJavascriptBridge/WebViewJavascriptBridge.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
#import <Foundation/Foundation.h>
1010

11-
#define kMessageSeparator @"__WVJB_MESSAGE_SEPERATOR__"
1211
#define kCustomProtocolScheme @"wvjbscheme"
1312
#define kQueueHasMessage @"__WVJB_QUEUE_MESSAGE__"
1413

WebViewJavascriptBridge/WebViewJavascriptBridge.js.txt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
var receiveMessageQueue = []
66
var messageHandlers = {}
77

8-
var MESSAGE_SEPARATOR = '__WVJB_MESSAGE_SEPERATOR__'
98
var CUSTOM_PROTOCOL_SCHEME = 'wvjbscheme'
109
var QUEUE_HAS_MESSAGE = '__WVJB_QUEUE_MESSAGE__'
1110

@@ -46,12 +45,12 @@
4645
responseCallbacks[callbackId] = responseCallback
4746
message['callbackId'] = callbackId
4847
}
49-
sendMessageQueue.push(JSON.stringify(message))
48+
sendMessageQueue.push(message)
5049
messagingIframe.src = CUSTOM_PROTOCOL_SCHEME + '://' + QUEUE_HAS_MESSAGE
5150
}
5251

5352
function _fetchQueue() {
54-
var messageQueueString = sendMessageQueue.join(MESSAGE_SEPARATOR)
53+
var messageQueueString = JSON.stringify(sendMessageQueue)
5554
sendMessageQueue = []
5655
return messageQueueString
5756
}

WebViewJavascriptBridge/WebViewJavascriptBridge.m

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ - (void)dealloc {
9292
}
9393

9494
- (void)_sendData:(NSDictionary *)data responseCallback:(WVJBResponseCallback)responseCallback handlerName:(NSString*)handlerName {
95+
if (!data) {
96+
data = (NSDictionary *)[NSNull null];
97+
}
9598
NSMutableDictionary* message = [NSMutableDictionary dictionaryWithObject:data forKey:@"data"];
9699

97100
if (responseCallback) {
@@ -138,12 +141,18 @@ - (void)_dispatchMessage:(NSDictionary *)message {
138141
- (void)_flushMessageQueue {
139142
NSString *messageQueueString = [_webView stringByEvaluatingJavaScriptFromString:@"WebViewJavascriptBridge._fetchQueue();"];
140143

141-
NSArray* messages = [messageQueueString componentsSeparatedByString:kMessageSeparator];
142-
for (NSString *messageJSON in messages) {
143-
[self _log:@"receivd" json:messageJSON];
144-
145-
NSDictionary* message = [self _deserializeMessageJSON:messageJSON];
146-
144+
id messages = [self _deserializeMessageJSON:messageQueueString];
145+
if (![messages isKindOfClass:[NSArray class]]) {
146+
NSLog(@"WebViewJavascriptBridge: WARNING: Invalid %@ received: %@", [messages class], messages);
147+
return;
148+
}
149+
for (NSDictionary *message in messages) {
150+
if (![message isKindOfClass:[NSDictionary class]]) {
151+
NSLog(@"WebViewJavascriptBridge: WARNING: Invalid %@ received: %@", [message class], message);
152+
continue;
153+
}
154+
[self _log:@"receivd" json:message];
155+
147156
NSString* responseId = message[@"responseId"];
148157
if (responseId) {
149158
WVJBResponseCallback responseCallback = _responseCallbacks[responseId];
@@ -202,10 +211,13 @@ - (NSDictionary *)_deserializeMessageJSON:(NSString *)messageJSON {
202211
#endif
203212
}
204213

205-
- (void)_log:(NSString *)action json:(NSString *)json {
214+
- (void)_log:(NSString *)action json:(id)json {
206215
if (!logging) { return; }
207-
if (json.length > 500) {
208-
NSLog(@"WVJB %@: %@", action, [[json substringToIndex:500] stringByAppendingString:@" [...]"]);
216+
if (![json isKindOfClass:[NSString class]]) {
217+
json = [self _serializeMessage:json];
218+
}
219+
if ([json length] > 500) {
220+
NSLog(@"WVJB %@: %@ [...]", action, [json substringToIndex:500]);
209221
} else {
210222
NSLog(@"WVJB %@: %@", action, json);
211223
}

0 commit comments

Comments
 (0)