Java 从Cordova 5.0.0访问appView
我很难从Android的最新Cordova版本(5.0.0)访问appView 例如,假设我想向我的应用程序添加一个Javascript接口。在这个版本之前,我经常写这行代码: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 { ... } 现在,它就是不起作用。科尔多瓦最近有什么变化
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将始终为空…谢谢