Peter created CB-4788: ------------------------- Summary: Android InAppBrowser workaround for destructive PROMPT bridge problems Key: CB-4788 URL: https://issues.apache.org/jira/browse/CB-4788 Project: Apache Cordova Issue Type: Improvement Components: Android, mobile-spec, Plugin InAppBrowser Affects Versions: 2.9.0 Reporter: Peter Assignee: Joe Bowser
We encountered the same problem as CB-4005 when running the manual mobile-spec tests. Please consider the following modified InAppBrowser code as a workaround to this issue. *Observations:* * If InAppBrowser uses Cordova API at all then the cordova.js falls back to using the PROMPT bridge because there is no _cordovaNative defined by InAppBrowser. * The InAppBrowser’s onJsPrompt method (current implementation) is not capable of handling the PROMPT bridge messages (eg "gap:", "gap_poll:" etc) The combination of the above causes the huge number of prompts which results in the application non-responsiveness issues already described by CB-4005 and elsewhere. *Solution:* Change the IAB onJsPrompt to simply _ignore_ those unhandled messages from Cordova PROMPT bridge. * Since there is no ability for IAB to run the API calls anyway [Ref 3] no functionality is lost. * Now the mobile-spec tests for InAppBrowser can run OK without suffering the unresponsive problems reported by CB-4005 and CB-3665 Perhaps this is not be a true "fix", but it is certainly more forgiving than the current implementation which just hangs. Here is my suggested modification for InAppBrowser.onJsPrompt() {code} @Override public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) { if (defaultValue != null) { // See if the prompt string uses the 'gap-iab' protocol. If so, the remainder should be the id of a callback to execute. if (defaultValue.startsWith("gap-iab://")) { ... // blah blah same code as before ... } /* * IAP does not support ability to execute Cordova API calls so just gobble them up * and log a warning. */ if (defaultValue.startsWith("gap")) { if (!defaultValue.equals("gap_poll:")) { LOG.w(LOG_TAG, "InAppBrowser does not support Cordova API calls: " + url + " " + defaultValue); } result.cancel(); return true; } } return false; } {code} Please try it. Works for me :) Related to: [1] CB-4005 [2] CB-3665 [3] PG Forum https://groups.google.com/forum/#!topic/phonegap/wyOezp7B-iI -- 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