[ 
https://issues.apache.org/jira/browse/CB-8468?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shazron Abdullah updated CB-8468:
---------------------------------
    Description: 
It you attach Safari to your application and hit a breakpoint in a Cordova 
callback the application freezes and you can't step through or continue.  This 
only happens in breakpoints in the native to JavaScript callbacks.  JavaScript 
breakpoints in other areas work fine.   

A simple way to reproduce is to use the globalization plugin.  Attach safari 
and put a breakpoint in the success callback.
{code}
navigator.globalization.getPreferredLanguage(function() {
        console.log("test"); // Will freeze if breakpoint set here
    }, function() {});
{code}

The problem seems to have to  do with the webview 
stringByEvaluatingJavaScriptFromString.  It is a synchronous call that can 
return the result of the JavaScript back to the native.  The native code will 
crash if a breakpoint is hit while trying to execute the JavaScript.  The 
workaround is to have your callback code in a setTimeout so it is not in the 
same context as the native stringByEvaluatingJavaScriptFromString call.
 
A workaround:
 
Open cordova.js and around line 281 replace:
 {code}
callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) 
{
 {code}
With:
 {code}
    callbackFromNative: function(callbackId, isSuccess, status, args, 
keepCallback) {
       setTimeout(function() {
            cordova.callbackFromNative2(callbackId, isSuccess, status, args, 
keepCallback);
        }, 0);
    },
       
    callbackFromNative2: function(callbackId, isSuccess, status, args, 
keepCallback) {
{code}


  was:
It you attach Safari to your application and hit a breakpoint in a Cordova 
callback the application freezes and you can't step through or continue.  This 
only happens in breakpoints in the native to JavaScript callbacks.  JavaScript 
breakpoints in other areas work fine.   

A simple way to reproduce is to use the globalization plugin.  Attach safari 
and put a breakpoint in the success callback.

navigator.globalization.getPreferredLanguage(function() {
        console.log("test"); // Will freeze if breakpoint set here
    }, function() {});


The problem seems to have to  do with the webview 
stringByEvaluatingJavaScriptFromString.  It is a synchronous call that can 
return the result of the JavaScript back to the native.  The native code will 
crash if a breakpoint is hit while trying to execute the JavaScript.  The 
workaround is to have your callback code in a setTimeout so it is not in the 
same context as the native stringByEvaluatingJavaScriptFromString call.
 
A workaround:
 
Open cordova.js and around line 281 replace:
 
callbackFromNative: function(callbackId, isSuccess, status, args, keepCallback) 
{
 
With:
 
    callbackFromNative: function(callbackId, isSuccess, status, args, 
keepCallback) {
       setTimeout(function() {
            cordova.callbackFromNative2(callbackId, isSuccess, status, args, 
keepCallback);
        }, 0);
    },
       
    callbackFromNative2: function(callbackId, isSuccess, status, args, 
keepCallback) {




> Application freezes if breakpoint hits JavaScript callback invoked from native
> ------------------------------------------------------------------------------
>
>                 Key: CB-8468
>                 URL: https://issues.apache.org/jira/browse/CB-8468
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: iOS
>            Reporter: Marcus Pridham
>            Priority: Minor
>
> It you attach Safari to your application and hit a breakpoint in a Cordova 
> callback the application freezes and you can't step through or continue.  
> This only happens in breakpoints in the native to JavaScript callbacks.  
> JavaScript breakpoints in other areas work fine.   
> A simple way to reproduce is to use the globalization plugin.  Attach safari 
> and put a breakpoint in the success callback.
> {code}
> navigator.globalization.getPreferredLanguage(function() {
>         console.log("test"); // Will freeze if breakpoint set here
>     }, function() {});
> {code}
> The problem seems to have to  do with the webview 
> stringByEvaluatingJavaScriptFromString.  It is a synchronous call that can 
> return the result of the JavaScript back to the native.  The native code will 
> crash if a breakpoint is hit while trying to execute the JavaScript.  The 
> workaround is to have your callback code in a setTimeout so it is not in the 
> same context as the native stringByEvaluatingJavaScriptFromString call.
>  
> A workaround:
>  
> Open cordova.js and around line 281 replace:
>  {code}
> callbackFromNative: function(callbackId, isSuccess, status, args, 
> keepCallback) {
>  {code}
> With:
>  {code}
>     callbackFromNative: function(callbackId, isSuccess, status, args, 
> keepCallback) {
>        setTimeout(function() {
>             cordova.callbackFromNative2(callbackId, isSuccess, status, args, 
> keepCallback);
>         }, 0);
>     },
>        
>     callbackFromNative2: function(callbackId, isSuccess, status, args, 
> keepCallback) {
> {code}



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to