@@ -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