4

我正在尝试在我的 android 应用程序中使用人行横道运行时。我在android 4+上试过这个。

我得到了一些 js 和 html 代码,它对我来说很完美。但它不像android webview那样工作。在 webview 中,我可以从 java 代码调用 javascript 函数。但我在人行横道中找不到任何选择。任何的想法?

谢谢

4

4 回答 4

10

在 Android Studio 中的 app/module/lib 级别 build.gradle 中,将其添加到依赖项中:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'org.xwalk:xwalk_core_library:12.41.296.5'}

同步项目

创建xml布局资源

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<org.xwalk.core.XWalkView
    android:id="@+id/xwalkWebView"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000000"
    />

</LinearLayout>

在活动 onCreate 或由它调用

//        Don't know how this helps if the preferences are connected?
XWalkPreferences.setValue("enable-javascript", true);
XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);

xWalkView=(XWalkView)findViewById(R.id.xwalkWebView);
xWalkView.addJavascriptInterface(new JS_Bind(this, xWalkView),"Android");

xWalkView.clearCache(true);
xWalkView.load(COM_URL, null);

创建类 JS_Bind:

public class JS_Bind {
    private static final String TAG = "JS_Bind";
    private Context context;
    private XWalkView xWalkWebView;

    public JS_Bind(Context c, XWalkView xWalkWebView) {
        context = c;
        this.xWalkWebView = xWalkWebView;
    }

    @JavascriptInterface
    public void showToast(String toast) {
        Log.d(TAG, "showToast(String toast)");
        Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
    }
}

在 Web Java 脚本中调用该函数:

Android.showToast(toast);

确保导入正确的 xwalk @JavaScripInterface 装饰器而不是标准的 Web 视图装饰器。

于 2015-03-24T12:57:44.577 回答
7

Crosswalk 支持与evaluateJavascriptAndroid WebView 类似的 API 接口 ( ) 用于从 Java 调用 JavaScript 函数:

https://crosswalk-project.org/apis/embeddingapidocs/reference/org/xwalk/core/XWalkView.html#evaluateJavascript(java.lang.String , )

您也可以load直接用于调用 javascript 函数,例如: xwalkView.load("javascript:" + jsCode, null).

您遇到过 Crosswalk API 的任何问题吗?

于 2014-07-07T06:53:21.890 回答
3

上面的回答差不多完成了。正如@Someone Somewhere 评论的那样,需要将这些添加到行中,以便从 Crosswalk Webview 调用本机功能。

  1. 添加此导入语句import org.xwalk.core.XWalkView;
  2. 在任何暴露给 javascript 的方法之前,将 this@org.xwalk.core.JavascriptInterface而不是默认注释@JavascriptInterface
于 2016-06-02T07:02:38.533 回答
0

用于调用 js 方法并将结果返回给 java 。你必须混合 Javascript 接口和评估Javascript。

public class JS_Bind {
    private static final String TAG = "JS_Bind";
    private Context context;
    private XWalkView xWalkWebView;

    public JS_Bind(Context c, XWalkView xWalkWebView) {
        context = c;
        this.xWalkWebView = xWalkWebView;
    }

    public String GetFullname(String FirstName , String LastName){
        xWalkWebView.evaluateJavascript(String.format(
        "Android.ReturnGetFullName(getFullName('%s','%s'))" , FirstName , LastName));
    }

    @JavascriptInterface
    public void ReturnGetFullName(String Fullname) {
        Log.d(TAG, "showToast(String toast)");
        Toast.makeText(context, Fullname, Toast.LENGTH_SHORT).show();
    }

    @JavascriptInterface
    public void showToast(String toast) {
        Log.d(TAG, "showToast(String toast)");
        Toast.makeText(context, toast, Toast.LENGTH_SHORT).show();
    }
}

在 javascript 中:

<script>
    function getFullName(FirstName , LastName){
        return FirstName +  " " + LastName;
    }
</script>
于 2019-01-16T10:28:08.737 回答