从Cordova 5.0.0访问appView

jos*_*mmo 7 java android cordova

appView从最新的Android版Cordova版本(5.0.0)访问我时遇到了麻烦.

例如,假设我想在我的应用中添加Javascript界面​​.在此版本之前,我曾经写过这行代码:

super.appView.addJavascriptInterface(new WebAppInterface(this), "jsInterface");
Run Code Online (Sandbox Code Playgroud)

然后是WebAppInterface:

public class WebAppInterface { ... }
Run Code Online (Sandbox Code Playgroud)

现在,它只是不起作用.Cordova最近有变化吗?我真的不知道该怎么做.

在这两种情况下(先前版本和新版本),我的主要活动都具有以下结构:

public class CordovaApp extends CordovaActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.init();
        loadUrl(Config.getStartUrl());
        ...
}
Run Code Online (Sandbox Code Playgroud)

jos*_*mmo 19

经过几天的寻找解决方案,我终于让应用程序工作了.

Cordova已经改变了访问Android的方式webView.使用Cordova 5.0.0及更新版本的开发人员需要将此行添加到其主要活动中:

WebView wV = (WebView)appView.getEngine().getView();
Run Code Online (Sandbox Code Playgroud)

然后,像往常一样打电话给wV.例如,要添加Javascript接口:

wV.addJavascriptInterface(new WebAppInterface(this), "jsInterface");
Run Code Online (Sandbox Code Playgroud)

我希望这个答案可以帮助那些对这个新更新感到困惑的人.


ang*_*nga 5

在我找到你的答案之前,我正要放弃,这帮助我解决了一个相关的问题 - 感谢josemmo.

也许这会对其他人有所帮助:在更新到Cordova 5/Android 4之后,我无法触发我的WebViewClient的shouldOverrideUrlLoading-Method,因为在新创建的WebView上设置了WebViewClient

WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)

在onCreate方法中什么也没做.

因此解决方案是不创建新的WebView,而是使用类似的铸造appView AND引擎:

SystemWebViewEngine systemWebViewEngine = (SystemWebViewEngine) appView.getEngine();
WebViewClient myWebViewClient = new myWebViewClient(systemWebViewEngine);

WebView webView = (WebView) systemWebViewEngine.getView();
webView.setWebViewClient(myWebViewClient);
Run Code Online (Sandbox Code Playgroud)

然后,自定义WebViewClient类需要一个构造函数:

public class myWebViewClient extends SystemWebViewClient {

    public myWebViewClient(SystemWebViewEngine systemWebViewEngine) {
        super(systemWebViewEngine);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我有点怀疑这应该怎么做,但至少它的工作.