[
https://issues.apache.org/jira/browse/CB-10774?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Shazron Abdullah updated CB-10774:
----------------------------------
Description:
>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?):
{code}
dispatch_async(dispatch_get_main_queue(), ^{
NSString* ret = [(UIWebView*)_engineWebView
stringByEvaluatingJavaScriptFromString:javaScriptString];
if (completionHandler)
{ completionHandler(ret, nil); }
});
{code}
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?
was:
>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?
> 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
> Assignee: Shazron Abdullah
> Labels: cordova-ios-4.1.1
>
> 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?):
> {code}
> dispatch_async(dispatch_get_main_queue(), ^{
> NSString* ret = [(UIWebView*)_engineWebView
> stringByEvaluatingJavaScriptFromString:javaScriptString];
> if (completionHandler)
> { completionHandler(ret, nil); }
> });
> {code}
> 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]