[ https://issues.apache.org/jira/browse/CB-2303?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Prince updated CB-2303: -------------------------------- Description: Android webview does not support window.onerror for catching unexpected javascript errors. This makes cross platform error logging and analysis very difficult (especially on released software). A new event could easily be added to enable developers to track javascript errors. e.g. in CordovaChromeClient.java change the onConsoleMessage override from {code:title=CordovaChromeClient.java - Current method|borderStyle=solid} @TargetApi(8) @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { if (consoleMessage.message() != null) LOG.d(TAG, consoleMessage.message()); return super.onConsoleMessage(consoleMessage); } {code} All this currently does is re-log messages. Changing the method to the below also triggers a scripterror event for errors (this is just proof of concept code but works correctly). Developers can easily map this event to call a standard error handler. {code:title=CordovaChromeClient.java - Suggested method|borderStyle=solid} @TargetApi(8) @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { if (consoleMessage.message() != null) { if (consoleMessage.messageLevel().name() == "ERROR") { String errorUrl = "javascript:cordova.fireDocumentEvent('scripterror', {msg: \"" + consoleMessage.message() + "\", line: " + consoleMessage.lineNumber() + ", url: \"" + consoleMessage.sourceId() + "\"});"; this.appView.loadUrl(errorUrl); LOG.e(TAG, consoleMessage.message() + " line " + consoleMessage.lineNumber() + " in " + consoleMessage.sourceId()); } else { LOG.d(TAG, consoleMessage.message()); } } return super.onConsoleMessage(consoleMessage); } {code} The only quirk I have found with this approach is that javascript calls to console.error also trigger the scripterror event. This actually seems logical but developers should be aware of it. Otherwise; unexpected script errors and thrown errors trigger the event and handled errors (in try...catch blocks) don't. was: Android webview does not support window.onerror for catching unexpected javascript errors. This makes cross platform error logging and analysis very difficult (especially on released software). A new event could easily be added to enable developers to track javascript errors. e.g. in CordovaChromeClient.java change the onConsoleMessage override from @TargetApi(8) @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { if (consoleMessage.message() != null) LOG.d(TAG, consoleMessage.message()); return super.onConsoleMessage(consoleMessage); } All this currently does is re-log messages. Changing the method to the below also triggers a scripterror event for errors (this is just proof of concept code but works correctly). Developers can easily map this event to call a standard error handler. @TargetApi(8) @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { if (consoleMessage.message() != null) { if (consoleMessage.messageLevel().name() == "ERROR") { String errorUrl = "javascript:cordova.fireDocumentEvent('scripterror', {msg: \"" + consoleMessage.message() + "\", line: " + consoleMessage.lineNumber() + ", url: \"" + consoleMessage.sourceId() + "\"});"; this.appView.loadUrl(errorUrl); LOG.e(TAG, consoleMessage.message() + " line " + consoleMessage.lineNumber() + " in " + consoleMessage.sourceId()); } else { LOG.d(TAG, consoleMessage.message()); } } return super.onConsoleMessage(consoleMessage); } The only quirk I have found with this approach is that javascript calls to console.error also trigger the scripterror event. This actually seems logical but developers should be aware of it. Otherwise; unexpected script errors and thrown errors trigger the event and handled errors (in try...catch blocks) don't. > Add event for script errors > --------------------------- > > Key: CB-2303 > URL: https://issues.apache.org/jira/browse/CB-2303 > Project: Apache Cordova > Issue Type: New Feature > Components: Android > Reporter: Jonathan Prince > Assignee: Joe Bowser > > Android webview does not support window.onerror for catching unexpected > javascript errors. This makes cross platform error logging and analysis very > difficult (especially on released software). > A new event could easily be added to enable developers to track javascript > errors. > e.g. in CordovaChromeClient.java change the onConsoleMessage override from > {code:title=CordovaChromeClient.java - Current method|borderStyle=solid} > @TargetApi(8) > @Override > public boolean onConsoleMessage(ConsoleMessage consoleMessage) > { > if (consoleMessage.message() != null) > LOG.d(TAG, consoleMessage.message()); > return super.onConsoleMessage(consoleMessage); > } > {code} > All this currently does is re-log messages. Changing the method to the below > also triggers a scripterror event for errors (this is just proof of concept > code but works correctly). Developers can easily map this event to call a > standard error handler. > {code:title=CordovaChromeClient.java - Suggested method|borderStyle=solid} > @TargetApi(8) > @Override > public boolean onConsoleMessage(ConsoleMessage consoleMessage) > { > if (consoleMessage.message() != null) > { > if (consoleMessage.messageLevel().name() == "ERROR") > { > String errorUrl = > "javascript:cordova.fireDocumentEvent('scripterror', {msg: \"" + > consoleMessage.message() + "\", line: " + consoleMessage.lineNumber() + ", > url: \"" + consoleMessage.sourceId() + "\"});"; > this.appView.loadUrl(errorUrl); > LOG.e(TAG, consoleMessage.message() + " line " + > consoleMessage.lineNumber() + " in " + consoleMessage.sourceId()); > } > else > { > LOG.d(TAG, consoleMessage.message()); > } > } > return super.onConsoleMessage(consoleMessage); > } > {code} > The only quirk I have found with this approach is that javascript calls to > console.error also trigger the scripterror event. This actually seems logical > but developers should be aware of it. > Otherwise; unexpected script errors and thrown errors trigger the event and > handled errors (in try...catch blocks) don't. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira