[ https://issues.apache.org/jira/browse/CB-8468?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14382384#comment-14382384 ]
Andrew Grieve commented on CB-8468: ----------------------------------- One one hand, passing debug:true to every callback adds overhead to every call, on the other hand, we do this only for debug mode, so probably fine! :) > 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: CordovaJS, iOS > Reporter: Marcus Pridham > Priority: Minor > Fix For: 4.0.0 > > > 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