Crosswalk从JavaScript调用Java方法

Ovi*_*lia 3 java android webview cordova crosswalk-runtime

我现在正在使用人行横道.当用户单击HTML中的按钮时,我需要调用Java方法,这可能如下所示:

<a href="#" onclick="callJava()">Start</a>
Run Code Online (Sandbox Code Playgroud)

我不确定Crosswalk扩展是否是我想要的,这对于调用Java函数似乎是如此重要.

有更简单的方法吗?或者在这种情况下我应该将Cordova与Crosswalk一起使用?

Kri*_*ofe 7

这里是关于如何在人行横道XWalkView中使用js调用java函数.如何使用XWalkView参考这个答案.

参考文献:

人行横道通话-Java的方法 - 用JavaScript的

XWalkView手册

下面是从js和通知调用java的过程.

将此添加到您在XWalkView中的活动

webSettings.setJavaScriptEnabled(true);
mXWalkView.addJavascriptInterface(new JsInterface(), "NativeInterface");
Run Code Online (Sandbox Code Playgroud)

而这,你也把它变成了一个类

public class JsInterface {
    public JsInterface() {
    }

    @JavascriptInterface
    public void act() {
        //do something
    }
}
Run Code Online (Sandbox Code Playgroud)

并在HTML页面中

<button onclick="NativeInterface.act()">Call Java Here</button>
Run Code Online (Sandbox Code Playgroud)

当您导入JavascriptInterface时,请注意,确保您导入了确切的一个.

import org.xwalk.core.JavascriptInterface;
Run Code Online (Sandbox Code Playgroud)

不是这个,这是webview

import android.webkit.JavascriptInterface;

如果你导入这个,当你在页面上操作时,这将导致没有动作,并在你的android工作室中出现以下错误.

12-02 13:24:49.921 12376-12376/com.xxxxxx.app E/chromium:[错误:xwalk_autofill_client.cc(121)]未实现在virtual void xwalk中实现:: XWalkAutofillClient :: OnFirstUserGestureObserved()

通常在导入JavascriptInterface时,第一个就是我们想要的,如下图所示.

但有时当您从webview更改为XWalkView时,您可能会忘记更改JavascriptInterface.

在此输入图像描述