我现在正在使用人行横道。当用户单击 HTML 中的按钮时,我需要调用 Java 方法,可能如下所示:
<a href="#" onclick="callJava()">Start</a>
我不确定Crosswalk 扩展是否是我想要的,这似乎只是为了调用 Java 函数而显得如此重要。
有没有更简单的方法来做到这一点?还是在这种情况下我应该将 Cordova 与 Crosswalk 一起使用?
我现在正在使用人行横道。当用户单击 HTML 中的按钮时,我需要调用 Java 方法,可能如下所示:
<a href="#" onclick="callJava()">Start</a>
我不确定Crosswalk 扩展是否是我想要的,这似乎只是为了调用 Java 函数而显得如此重要。
有没有更简单的方法来做到这一点?还是在这种情况下我应该将 Cordova 与 Crosswalk 一起使用?
这里是关于如何在人行横道XWalkView中使用js调用java函数。如何使用 XWalkView 参考这个答案。
参考:
人行横道调用 java-methods-with-javascript
下面是从js调用java的过程,以及注意事项。
将此添加到 XWalkView 中的活动
webSettings.setJavaScriptEnabled(true);
mXWalkView.addJavascriptInterface(new JsInterface(), "NativeInterface");
而这个,你也让它成为一个类
public class JsInterface {
public JsInterface() {
}
@JavascriptInterface
public void act() {
//do something
}
}
并在 html 页面中
<button onclick="NativeInterface.act()">Call Java Here</button>
当您导入 JavascriptInterface 时,请注意,确保您导入了正确的接口。
import org.xwalk.core.JavascriptInterface;
不是这个,这是给webview的
import android.webkit.JavascriptInterface;
如果你导入这个,当你在你的android studio中的页面和下面的错误中操作时,这将导致没有任何动作。
12-02 13:24:49.921 12376-12376/com.xxxxxx.app E/chromium: [ERROR:xwalk_autofill_client.cc(121)] 未在虚拟 void xwalk::XWalkAutofillClient::OnFirstUserGestureObserved() 中实现
通常当您导入 JavascriptInterface 时,第一个就是我们想要的,如下图所示。
但有时当您从 webview 更改为 XWalkView 时,您可能会忘记更改 JavascriptInterface。
如果您只使用 XWalkView 作为嵌入式视图,addJavascriptInterface
则足以将 Java 对象注入 XWalkView(JavaScript),就像addJavascriptInterface
在 android.webkit.WebView 中一样:
https://crosswalk-project.org/apis/embeddingapidocs_v2/reference/org/xwalk/core/XWalkView.html
http://developer.android.com/guide/webapps/webview.html#BindingJavaScript