Skip to content

Commit 29ffca5

Browse files
committed
fix json
1 parent e5a6971 commit 29ffca5

File tree

2 files changed

+24
-12
lines changed

2 files changed

+24
-12
lines changed

STMScriptMessageHandler/Demo/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
});
4949

5050
App.Bridge.registerMethod('log', function (data, callback) {
51-
var message = JSON.parse(data);
51+
var message = data;
5252
log('Native calling js method `log`', message);
5353
callback({ key: 'from js', value: data });
5454
});

STMScriptMessageHandler/Source/STMScriptMessageHandler.m

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,23 @@ - (void)callMethod:(NSString *)methodName parameters:(NSDictionary *)parameters
8282
callbackId = [NSString stringWithFormat:@"cb_%d_%.0f", gSTMCallbackUniqueId++, [NSDate timeIntervalSinceReferenceDate] * 1000];
8383
self.jsResponseHandlers[callbackId] = handler;
8484
}
85-
NSString *formatParameter = [self _formatParameters:parameters];
86-
NSString *js = STM_JS_FUNC(%@.%@.nativeCall('%@','%@','%@'), kSTMApp, self.handlerName, methodName, formatParameter, callbackId);
87-
[self _evaluateJavaScript:js completionHandler:nil];
85+
NSString *formatParameter = [self _formatParameters:@{@"parameters": parameters}];
86+
NSString *js = STM_JS_FUNC(%@.%@.nativeCall('%@',JSON.parse('%@').parameters,'%@'), kSTMApp, self.handlerName, methodName, formatParameter, callbackId);
87+
[self _evaluateJavaScript:js];
8888
[self _debug:@"native call js's method" method:methodName parameters:parameters];
8989
}
9090

9191
#pragma mark - Private
9292

9393
- (void)_response:(NSString *)methodName callbackId:(NSString *)callbackId parameter:(nullable id)parameter deleteCallback:(BOOL)delete {
94-
NSString *formatParameter = [self _formatParameters:parameter];
94+
NSString *formatParameter = [self _formatParameters:@{@"responseData": parameter}];
9595
callbackId = callbackId ?: @"";
9696
NSString *js = STM_JS_FUNC(
9797
var callback = %@.%@.callback['%@'];
98-
if (callback) { callback('%@'); if (%d) { delete %@.%@.callback.%@ }}
98+
if (callback) { callback(JSON.parse('%@').responseData); if (%d) { delete %@.%@.callback.%@ }}
9999
, kSTMApp, self.handlerName, callbackId, formatParameter, delete, kSTMApp, self.handlerName, callbackId
100100
);
101-
[self _evaluateJavaScript:js completionHandler:nil];
101+
[self _evaluateJavaScript:js];
102102
}
103103

104104
- (void)_addJS1 {
@@ -177,11 +177,23 @@ - (void)_addJSScript:(NSString *)jsScript forMainFrameOnly:(BOOL)flag {
177177
[self.webView.configuration.userContentController addUserScript:userScript];
178178
}
179179

180-
- (void)_evaluateJavaScript:(NSString *)javaScriptString
181-
completionHandler:(void (^ _Nullable)(_Nullable id info, NSError * _Nullable error))completionHandler {
182-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
183-
[self.webView evaluateJavaScript:javaScriptString completionHandler:completionHandler];
184-
});
180+
- (void)_evaluateJavaScript:(NSString *)javaScriptString {
181+
void (^task)(void) = ^{
182+
__weak typeof(self) __weak_self__ = self;
183+
[self.webView evaluateJavaScript:javaScriptString completionHandler:^(id _Nullable info, NSError * _Nullable error) {
184+
__strong typeof(__weak_self__) self = __weak_self__;
185+
if (error) {
186+
[self.webView reload];
187+
}
188+
}];
189+
};
190+
if ([NSThread currentThread].isMainThread) {
191+
task();
192+
} else {
193+
dispatch_async(dispatch_get_main_queue(), ^{
194+
task();
195+
});
196+
}
185197
}
186198

187199
- (NSString *)_formatParameters:(NSDictionary *)parameters {

0 commit comments

Comments
 (0)