android上java的人行横道调用js函数

android上java的人行横道调用js函数,java,javascript,android,crosswalk-runtime,Java,Javascript,Android,Crosswalk Runtime,我正在尝试在我的android应用程序中使用runtime。我在安卓4+上试过这个 我得到了一些js&html代码,它对我来说非常适合。但它不像android webview那样工作。在webview中,我可以从java代码调用javascript函数。但是我在人行横道上找不到任何选择。有什么想法吗 感谢Crosswalk支持与Android WebView类似的API接口(evaluateJavascript),用于从Java调用JavaScript函数: ,) 您还可以使用load直接调用j

我正在尝试在我的android应用程序中使用runtime。我在安卓4+上试过这个

我得到了一些js&html代码,它对我来说非常适合。但它不像android webview那样工作。在webview中,我可以从java代码调用javascript函数。但是我在人行横道上找不到任何选择。有什么想法吗


感谢Crosswalk支持与Android WebView类似的API接口(
evaluateJavascript
),用于从Java调用JavaScript函数:

,)

您还可以使用
load
直接调用javascript函数,如:
xwalkView.load(“javascript:+jsCode,null)


您是否遇到过人行横道API的任何问题?

在Android Studio内部的app/module/lib-level 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>
创建类JS_绑定:

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视图装饰器。

以上的响应几乎完成。当@Someone在某处评论时,需要将这些添加到行中,以便从Crosswalk Webview调用本机功能

  • 添加此导入语句
    import org.xwalk.core.XWalkView
  • 在向javascript公开任何方法之前,请将此
    @org.xwalk.core.JavascriptInterface
    而不是默认注释
    @JavascriptInterface

  • 用于调用js方法并将结果返回给java。您必须混合使用Javascript接口和evaluateJavascript

    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>
    
    
    函数getFullName(FirstName,LastName){
    返回FirstName+“”+LastName;
    }
    
    Hi,我使用的是普通的webview,当时我使用的是loadUrl。但对于crosswalk api,没有像loadUrl这样的选项。只需加载函数就可以了。此外,evaluateJavascript不工作传感器,您可以在XWalkView:,java.lang.String)中使用
    load
    方法,例如:
    XWalkView.load(“javascript:+jsCode,null)
    @gokhangokce您如何调用
    evaluateJavascript
    方法?@vArDo我真的忘了。我检查了我的代码,但我现在不使用人行横道。这不是一个有效的解决办法。我建议您使用新的chromium网络视图。@gokhangokce OK。KitKat中的新chromium很不错,但不幸的是,我需要支持旧版本的Android,并获得一致的结果。人行横道可能是最稳定的方法。到目前为止没有任何问题。谢谢您的回答!问题:您如何知道“EnableJavaScript”键名是正确的?我本以为XWalkPreferences类已经定义了这个键名……我仍然从javascript“UncaughtTypeError:undefined不是函数”中得到错误,即使本机方法是公共的,包含的类是公共的,本机方法显示
    @JavascriptInterface
    我不确定您的问题是什么,但我认为您应该确保addJavaScriptInterface中的java绑定名为“Android”,而JS指的是Android对象,因此我发现默认情况下启用了javascript。然而,一个关键的魔法是。。。将“import android.webkit.JavascriptInterface;”更改为“import org.xwalk.core.JavascriptInterface;”这并不是告诉您如何从java调用javascript,而是告诉您如何通过接口从javascript调用java
    <script>
        function getFullName(FirstName , LastName){
            return FirstName +  " " + LastName;
        }
    </script>