From f60d54eae4a6af0ab55fa8fa1323b5ebacf8db85 Mon Sep 17 00:00:00 2001 From: Ian Clelland Date: Mon, 18 Mar 2013 10:16:24 -0400 Subject: [PATCH 1/3] [CB-2305] Add InAppBrowser injectSriptCode command to support InAppBrowser.executeScript and InAppBrowser.insertCSS APIs --- .../src/org/apache/cordova/InAppBrowser.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/framework/src/org/apache/cordova/InAppBrowser.java b/framework/src/org/apache/cordova/InAppBrowser.java index 48e27c60..02aa002d 100644 --- a/framework/src/org/apache/cordova/InAppBrowser.java +++ b/framework/src/org/apache/cordova/InAppBrowser.java @@ -151,6 +151,21 @@ public class InAppBrowser extends CordovaPlugin { pluginResult.setKeepCallback(false); this.callbackContext.sendPluginResult(pluginResult); } + else if (action.equals("injectScriptCode")) { + String source = args.getString(0); + + org.json.JSONArray jsonEsc = new org.json.JSONArray(); + jsonEsc.put(source); + String jsonRepr = jsonEsc.toString(); + String jsonSourceString = jsonRepr.substring(1, jsonRepr.length()-1); + String scriptEnclosure = "(function(d){var c=d.createElement('script');c.type='text/javascript';c.innerText=" + + jsonSourceString + + ";d.getElementsByTagName('head')[0].appendChild(c);})(document)"; + this.inAppWebView.loadUrl("javascript:" + scriptEnclosure); + + PluginResult pluginResult = new PluginResult(PluginResult.Status.OK); + this.callbackContext.sendPluginResult(pluginResult); + } else { status = PluginResult.Status.INVALID_ACTION; } From 0c740909534b355cd5628380689544c4f2c2a8b8 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Sat, 23 Mar 2013 14:07:22 -0400 Subject: [PATCH 2/3] Log a message when exec() is made to an unregistered plugin. --- framework/src/org/apache/cordova/api/PluginManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/src/org/apache/cordova/api/PluginManager.java b/framework/src/org/apache/cordova/api/PluginManager.java index 337ef129..774b21c3 100755 --- a/framework/src/org/apache/cordova/api/PluginManager.java +++ b/framework/src/org/apache/cordova/api/PluginManager.java @@ -30,6 +30,7 @@ import org.xmlpull.v1.XmlPullParserException; import android.content.Intent; import android.content.res.XmlResourceParser; +import android.util.Log; import android.webkit.WebResourceResponse; /** @@ -213,6 +214,7 @@ public class PluginManager { public boolean exec(String service, String action, String callbackId, String rawArgs) { CordovaPlugin plugin = this.getPlugin(service); if (plugin == null) { + Log.d(TAG, "exec() call to unknown plugin: " + service); PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION); app.sendPluginResult(cr, callbackId); return true; From 73c7994cd15264349f64fe82cb83e61558ebbd53 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Sat, 23 Mar 2013 14:07:57 -0400 Subject: [PATCH 3/3] Fix NPE in InAppBrowser. When cordova.getActivity().getIntent().getExtras() == null. --- framework/src/org/apache/cordova/InAppBrowser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/org/apache/cordova/InAppBrowser.java b/framework/src/org/apache/cordova/InAppBrowser.java index 02aa002d..0d5d4965 100644 --- a/framework/src/org/apache/cordova/InAppBrowser.java +++ b/framework/src/org/apache/cordova/InAppBrowser.java @@ -460,7 +460,7 @@ public class InAppBrowser extends CordovaPlugin { //Toggle whether this is enabled or not! Bundle appSettings = cordova.getActivity().getIntent().getExtras(); - boolean enableDatabase = appSettings.getBoolean("InAppBrowserStorageEnabled", true); + boolean enableDatabase = appSettings == null ? true : appSettings.getBoolean("InAppBrowserStorageEnabled", true); if(enableDatabase) { String databasePath = cordova.getActivity().getApplicationContext().getDir("inAppBrowserDB", Context.MODE_PRIVATE).getPath();