Repository: cordova-ios Updated Branches: refs/heads/wkwebview 28b447507 -> 6d6ab0a16
CB-7182 - Running mobile-spec in an iOS 8 project but using UIWebView results in an exception Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/6d6ab0a1 Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/6d6ab0a1 Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/6d6ab0a1 Branch: refs/heads/wkwebview Commit: 6d6ab0a161f93eee92faa1d3888318e3144e6f29 Parents: 28b4475 Author: Shazron Abdullah <[email protected]> Authored: Mon Jul 21 14:02:43 2014 -0700 Committer: Shazron Abdullah <[email protected]> Committed: Mon Jul 21 14:02:43 2014 -0700 ---------------------------------------------------------------------- CordovaLib/Classes/CDVCommandQueue.m | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/6d6ab0a1/CordovaLib/Classes/CDVCommandQueue.m ---------------------------------------------------------------------- diff --git a/CordovaLib/Classes/CDVCommandQueue.m b/CordovaLib/Classes/CDVCommandQueue.m index b4f1fa6..bb2788b 100644 --- a/CordovaLib/Classes/CDVCommandQueue.m +++ b/CordovaLib/Classes/CDVCommandQueue.m @@ -109,25 +109,19 @@ static const double MAX_EXECUTION_TIME = .008; // Half of a 60fps frame. - (void)fetchCommandsFromJs { + __weak CDVCommandQueue* weakSelf = self; NSString* js = @"cordova.require('cordova/exec').nativeFetchMessages()"; - SEL ui_selector = NSSelectorFromString(@"stringByEvaluatingJavaScriptFromString:"); - // Grab all the queued commands from the JS side. - NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: - [[_viewController.webView class] instanceMethodSignatureForSelector:ui_selector]]; - - [invocation setSelector:ui_selector]; - [invocation setTarget:_viewController.webView]; - // arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation - [invocation setArgument:&(js) atIndex:2]; - - [invocation invoke]; - - NSString* queuedCommandsJSON; - [invocation getReturnValue:&(queuedCommandsJSON)]; - - CDV_EXEC_LOG(@"Exec: Flushed JS->native queue (hadCommands=%d).", [queuedCommandsJSON length] > 0); - [self enqueueCommandBatch:queuedCommandsJSON]; + [_viewController.webViewOperationsDelegate evaluateJavaScript:js + completionHandler:^(id obj, NSError* error) { + if ((error == nil) && [obj isKindOfClass:[NSString class]]) { + NSString* queuedCommandsJSON = (NSString*)obj; + CDV_EXEC_LOG(@"Exec: Flushed JS->native queue (hadCommands=%d).", [queuedCommandsJSON length] > 0); + [weakSelf enqueueCommandBatch:queuedCommandsJSON]; + // this has to be called here now, because fetchCommandsFromJs is now async (previously: synchronous) + [self executePending]; + } + }]; } - (void)executePending
