Torsten Freyhall created CB-10774:
-------------------------------------

             Summary: CDVUIWebView performs javascript synchronous, but command 
queue expects it to be async
                 Key: CB-10774
                 URL: https://issues.apache.org/jira/browse/CB-10774
             Project: Apache Cordova
          Issue Type: Bug
          Components: iOS
    Affects Versions: 4.1.0
            Reporter: Torsten Freyhall


>From https://issues.apache.org/jira/browse/CB-10530 regarding app freezing at 
>launch.

...
However I was not sure about why the timer resolves due to long script 
execution times though. It seems like the intention is that whenever 
gap://ready is loaded in the iframe, the immediate response from the native 
side should be to call nativeFetchMessages() which should clear the timeout.

Therefore I dug a little deeper in the native side, and found that the 
evaluateJavaScript:completionHandler: in CDVCommandQueue expects implementation 
to to be async (a comment in the code says so), but the CDVUIWebViewEngine 
method actually is implemented synchronous.
I wrapped the entire method in a dispatch_async call (maybe a very naive 
solution, it might mess with references?):

dispatch_async(dispatch_get_main_queue(), ^{
  NSString* ret = [(UIWebView*)_engineWebView 
stringByEvaluatingJavaScriptFromString:javaScriptString];
if (completionHandler)
{ completionHandler(ret, nil); }
});

This also solves the original issue on cordova-ios 4.0.1 as the timeout never 
resolves, so maybe asyncing this method should also be a part of the proper fix?



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to