Java 从Cordova 5.0.0访问appView

Java 从Cordova 5.0.0访问appView,java,android,cordova,Java,Android,Cordova,我很难从Android的最新Cordova版本(5.0.0)访问appView 例如,假设我想向我的应用程序添加一个Javascript接口。在这个版本之前,我经常写这行代码: super.appView.addJavascriptInterface(new WebAppInterface(this), "jsInterface"); 然后是WebAppInterface: public class WebAppInterface { ... } 现在,它就是不起作用。科尔多瓦最近有什么变化

我很难从Android的最新Cordova版本(5.0.0)访问appView

例如,假设我想向我的应用程序添加一个Javascript接口。在这个版本之前,我经常写这行代码:

super.appView.addJavascriptInterface(new WebAppInterface(this), "jsInterface");
然后是
WebAppInterface

public class WebAppInterface { ... }
现在,它就是不起作用。科尔多瓦最近有什么变化吗?我真的不知道该怎么办

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

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

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

Cordova已经改变了访问Android
webView
的方式。使用Cordova 5.0.0及更新版本的开发人员需要在其主要活动中添加以下内容:

WebView wV = (WebView)appView.getEngine().getView();
然后,像往常一样给wV打电话。例如,要添加Javascript接口,请执行以下操作:

wV.addJavascriptInterface(new WebAppInterface(this), "jsInterface");

我希望这个答案能帮助其他对这个新更新感到困惑的人。

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

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

WebView webView = new WebView(this);
webView.setWebViewClient(new WebViewClient());
在onCreate方法中,没有执行任何操作

因此,解决方案不是创建新的WebView,而是像这样使用casted appView和引擎:

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

WebView webView = (WebView) systemWebViewEngine.getView();
webView.setWebViewClient(myWebViewClient);
然后,自定义WebViewClient类需要一个构造函数:

public class myWebViewClient extends SystemWebViewClient {

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

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        ...
    }
}

我有点怀疑这是应该怎么做的,但至少它起作用了。

我有一种类似的“5天后运行”的情绪:-(在我的onCreate方法中,this.appview和super.appview是空的。我使用XWalk(Crosswalk)但我认为这只是一个正确转换webview的问题。不管怎么说,使用空值,你哪儿也去不了……这是一个IONIC应用程序,因为我的是。请看这里的repo,我希望对你的解决方案有更多的了解:请看我对主要问题的评论:super.init()在IONIC starter应用程序中丢失。我不知道这一点,因为之前应用程序在没有它的情况下成功运行。无论如何,你的线程在3天后是正确的指针…evaIuateJavascript的转换工作正常,但我没有在窗口对象中获得接口。我必须在MainActivity中执行此操作,还是可以在插件代码中执行此操作(哪个结果更有用)?在更新proguard-project.txt文件中的
-keepclassmembers
设置之前,我没有在我的
window.jsInterface
对象上获取方法。super.init救了我的命。我的this.appview将始终为空…谢谢