CB-12184 executeScript leads to a null pointer on exception on Android.

This closes #199
This commit is contained in:
Julio César 2016-11-24 18:50:49 +01:00
parent 1b4859c175
commit 8ab07277cd
2 changed files with 30 additions and 26 deletions

View File

@ -222,7 +222,7 @@ The object returned from a call to `cordova.InAppBrowser.open` when the target i
## InAppBrowser.addEventListener
> Adds a listener for an event from the `InAppBrowser`.
> Adds a listener for an event from the `InAppBrowser`. (Only available when the target is set to `'_blank'`)
ref.addEventListener(eventname, callback);
@ -338,7 +338,7 @@ function executeScriptCallBack(params) {
## InAppBrowser.removeEventListener
> Removes a listener for an event from the `InAppBrowser`.
> Removes a listener for an event from the `InAppBrowser`. (Only available when the target is set to `'_blank'`)
ref.removeEventListener(eventname, callback);
@ -438,7 +438,7 @@ The function is passed an `InAppBrowserEvent` object.
## InAppBrowser.executeScript
> Injects JavaScript code into the `InAppBrowser` window
> Injects JavaScript code into the `InAppBrowser` window. (Only available when the target is set to `'_blank'`)
ref.executeScript(details, callback);
@ -480,7 +480,7 @@ Due to [MSDN docs](https://msdn.microsoft.com/en-us/library/windows.ui.xaml.cont
## InAppBrowser.insertCSS
> Injects CSS into the `InAppBrowser` window.
> Injects CSS into the `InAppBrowser` window. (Only available when the target is set to `'_blank'`)
ref.insertCSS(details, callback);

View File

@ -323,29 +323,33 @@ public class InAppBrowser extends CordovaPlugin {
* which should be executed directly.
*/
private void injectDeferredObject(String source, String jsWrapper) {
String scriptToInject;
if (jsWrapper != null) {
org.json.JSONArray jsonEsc = new org.json.JSONArray();
jsonEsc.put(source);
String jsonRepr = jsonEsc.toString();
String jsonSourceString = jsonRepr.substring(1, jsonRepr.length()-1);
scriptToInject = String.format(jsWrapper, jsonSourceString);
} else {
scriptToInject = source;
}
final String finalScriptToInject = scriptToInject;
this.cordova.getActivity().runOnUiThread(new Runnable() {
@SuppressLint("NewApi")
@Override
public void run() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
// This action will have the side-effect of blurring the currently focused element
inAppWebView.loadUrl("javascript:" + finalScriptToInject);
} else {
inAppWebView.evaluateJavascript(finalScriptToInject, null);
}
if (inAppWebView!=null) {
String scriptToInject;
if (jsWrapper != null) {
org.json.JSONArray jsonEsc = new org.json.JSONArray();
jsonEsc.put(source);
String jsonRepr = jsonEsc.toString();
String jsonSourceString = jsonRepr.substring(1, jsonRepr.length()-1);
scriptToInject = String.format(jsWrapper, jsonSourceString);
} else {
scriptToInject = source;
}
});
final String finalScriptToInject = scriptToInject;
this.cordova.getActivity().runOnUiThread(new Runnable() {
@SuppressLint("NewApi")
@Override
public void run() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
// This action will have the side-effect of blurring the currently focused element
inAppWebView.loadUrl("javascript:" + finalScriptToInject);
} else {
inAppWebView.evaluateJavascript(finalScriptToInject, null);
}
}
});
} else {
LOG.d(LOG_TAG, "Can't inject code into the system browser");
}
}
/**