[ 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