corodova源码分析之corodovawebview

该分析基于Corodova 6.3.0

CordovaWebViewImpl继承自CordovaWebView。该类主要用于Cordova中WebView的交互处理。
先看一下他的成员变量。

public static final String TAG = "CordovaWebViewImpl";

private PluginManager pluginManager;

protected final CordovaWebViewEngine engine;
private CordovaInterface cordova;

// Flag to track that a loadUrl timeout occurred
private int loadUrlTimeout = 0;

private CordovaResourceApi resourceApi;
private CordovaPreferences preferences;
private CoreAndroid appPlugin;
private NativeToJsMessageQueue nativeToJsMessageQueue;
private EngineClient engineClient = new EngineClient();
private boolean hasPausedEver;

// The URL passed to loadUrl(), not necessarily the URL of the current page.
String loadedUrl;

/** custom view created by the browser (a video player for example) */
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;

private Set<Integer> boundKeyCodes = new HashSet<Integer>();

PluginManager: 对于插件的管理,有对插件的存取,他的主要方法为exec() :

public void exec(final String service, final String action, final String callbackId, final String rawArgs) {
    CordovaPlugin plugin = 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;
    }
    CallbackContext callbackContext = new CallbackContext(callbackId, app);
    try {
        long pluginStartTime = System.currentTimeMillis();
        boolean wasValidAction = plugin.execute(action, rawArgs, callbackContext);
        long duration = System.currentTimeMillis() - pluginStartTime;

        if (duration > SLOW_EXEC_WARNING_THRESHOLD) {
            Log.w(TAG, "THREAD WARNING: exec() call to " + service + "." + action + " blocked the main thread for " + duration + "ms. Plugin should use CordovaInterface.getThreadPool().");
        }
        if (!wasValidAction) {
            PluginResult cr = new PluginResult(PluginResult.Status.INVALID_ACTION);
            callbackContext.sendPluginResult(cr);
        }
    } catch (JSONException e) {
        PluginResult cr = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
        callbackContext.sendPluginResult(cr);
    } catch (Exception e) {
        Log.e(TAG, "Uncaught exception from plugin", e);
        callbackContext.error(e.getMessage());
    }
}

CordovaInterface…

CordovaInterface,
CorodvaResourceApi: 对于资源的原生调用
CorodvaPreferences,