Creating an evaluateJavascript branch

This commit is contained in:
Joe Bowser 2016-03-09 10:35:09 -08:00
parent 0ee672d2b0
commit bb96bb9a88
5 changed files with 45 additions and 8 deletions

View File

@ -330,7 +330,7 @@ module.exports = cordova;
}); });
// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js // file: /Users/jbowser/cordova/cordova-android/cordova-js-src/android/nativeapiprovider.js
define("cordova/android/nativeapiprovider", function(require, exports, module) { define("cordova/android/nativeapiprovider", function(require, exports, module) {
/** /**
@ -353,7 +353,7 @@ module.exports = {
}); });
// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js // file: /Users/jbowser/cordova/cordova-android/cordova-js-src/android/promptbasednativeapi.js
define("cordova/android/promptbasednativeapi", function(require, exports, module) { define("cordova/android/promptbasednativeapi", function(require, exports, module) {
/** /**
@ -862,7 +862,7 @@ module.exports = channel;
}); });
// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/exec.js // file: /Users/jbowser/cordova/cordova-android/cordova-js-src/exec.js
define("cordova/exec", function(require, exports, module) { define("cordova/exec", function(require, exports, module) {
/** /**
@ -897,7 +897,8 @@ var cordova = require('cordova'),
// For the ONLINE_EVENT to be viable, it would need to intercept all event // For the ONLINE_EVENT to be viable, it would need to intercept all event
// listeners (both through addEventListener and window.ononline) as well // listeners (both through addEventListener and window.ononline) as well
// as set the navigator property itself. // as set the navigator property itself.
ONLINE_EVENT: 2 ONLINE_EVENT: 2,
EVAL_BRIDGE: 3
}, },
jsToNativeBridgeMode, // Set lazily. jsToNativeBridgeMode, // Set lazily.
nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT,
@ -1611,7 +1612,7 @@ exports.reset();
}); });
// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/platform.js // file: /Users/jbowser/cordova/cordova-android/cordova-js-src/platform.js
define("cordova/platform", function(require, exports, module) { define("cordova/platform", function(require, exports, module) {
// The last resume event that was received that had the result of a plugin call. // The last resume event that was received that had the result of a plugin call.
@ -1721,7 +1722,7 @@ function onMessageFromNative(msg) {
}); });
// file: /Users/steveng/repo/cordova/cordova-android/cordova-js-src/plugin/android/app.js // file: /Users/jbowser/cordova/cordova-android/cordova-js-src/plugin/android/app.js
define("cordova/plugin/android/app", function(require, exports, module) { define("cordova/plugin/android/app", function(require, exports, module) {
var exec = require('cordova/exec'); var exec = require('cordova/exec');
@ -2164,4 +2165,4 @@ window.cordova = require('cordova');
require('cordova/init'); require('cordova/init');
})(); })();

View File

@ -51,7 +51,8 @@ var cordova = require('cordova'),
// For the ONLINE_EVENT to be viable, it would need to intercept all event // For the ONLINE_EVENT to be viable, it would need to intercept all event
// listeners (both through addEventListener and window.ononline) as well // listeners (both through addEventListener and window.ononline) as well
// as set the navigator property itself. // as set the navigator property itself.
ONLINE_EVENT: 2 ONLINE_EVENT: 2,
EVAL_BRIDGE: 3
}, },
jsToNativeBridgeMode, // Set lazily. jsToNativeBridgeMode, // Set lazily.
nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT, nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT,

View File

@ -20,6 +20,7 @@ package org.apache.cordova;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.webkit.ValueCallback;
/** /**
* Interface for all Cordova engines. * Interface for all Cordova engines.
@ -58,6 +59,9 @@ public interface CordovaWebViewEngine {
/** Clean up all resources associated with the WebView. */ /** Clean up all resources associated with the WebView. */
void destroy(); void destroy();
/** Add the evaulate Javascript method **/
void evaluateJavascript(String js, ValueCallback<String> callback);
/** /**
* Used to retrieve the associated CordovaWebView given a View without knowing the type of Engine. * Used to retrieve the associated CordovaWebView given a View without knowing the type of Engine.
* E.g. ((CordovaWebView.EngineView)activity.findViewById(android.R.id.webView)).getCordovaWebView(); * E.g. ((CordovaWebView.EngineView)activity.findViewById(android.R.id.webView)).getCordovaWebView();

View File

@ -349,6 +349,31 @@ public class NativeToJsMessageQueue {
} }
} }
/** Uses webView.evaluateJavascript to execute messages. */
public static class EvalBridgeMode extends BridgeMode {
private final CordovaWebViewEngine engine;
private final CordovaInterface cordova;
public EvalBridgeMode(CordovaWebViewEngine engine, CordovaInterface cordova) {
this.engine = engine;
this.cordova = cordova;
}
@Override
public void onNativeToJsMessageAvailable(final NativeToJsMessageQueue queue) {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
String js = queue.popAndEncodeAsJs();
if (js != null) {
engine.evaluateJavascript(js, null);
}
}
});
}
}
private static class JsMessage { private static class JsMessage {
final String jsPayloadOrCallbackId; final String jsPayloadOrCallbackId;
final PluginResult pluginResult; final PluginResult pluginResult;

View File

@ -28,6 +28,7 @@ import android.content.IntentFilter;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.os.Build; import android.os.Build;
import android.view.View; import android.view.View;
import android.webkit.ValueCallback;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebSettings.LayoutAlgorithm; import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView; import android.webkit.WebView;
@ -331,4 +332,9 @@ public class SystemWebViewEngine implements CordovaWebViewEngine {
} }
} }
} }
@Override
public void evaluateJavascript(String js, ValueCallback<String> callback) {
webView.evaluateJavascript(js, callback);
}
} }