android上java的人行横道调用js函数
我正在尝试在我的android应用程序中使用runtime。我在安卓4+上试过这个 我得到了一些js&html代码,它对我来说非常适合。但它不像android webview那样工作。在webview中,我可以从java代码调用javascript函数。但是我在人行横道上找不到任何选择。有什么想法吗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
感谢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代码>
@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>