我正在尝试在我的 android 应用程序中使用人行横道运行时。我在android 4+上试过这个。
我得到了一些 js 和 html 代码,它对我来说很完美。但它不像android webview那样工作。在 webview 中,我可以从 java 代码调用 javascript 函数。但我在人行横道中找不到任何选择。任何的想法?
谢谢
我正在尝试在我的 android 应用程序中使用人行横道运行时。我在android 4+上试过这个。
我得到了一些 js 和 html 代码,它对我来说很完美。但它不像android webview那样工作。在 webview 中,我可以从 java 代码调用 javascript 函数。但我在人行横道中找不到任何选择。任何的想法?
谢谢
在 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 视图装饰器。
Crosswalk 支持与evaluateJavascript
Android WebView 类似的 API 接口 ( ) 用于从 Java 调用 JavaScript 函数:
您也可以load
直接用于调用 javascript 函数,例如:
xwalkView.load("javascript:" + jsCode, null)
.
您遇到过 Crosswalk API 的任何问题吗?
上面的回答差不多完成了。正如@Someone Somewhere 评论的那样,需要将这些添加到行中,以便从 Crosswalk Webview 调用本机功能。
import org.xwalk.core.XWalkView;
@org.xwalk.core.JavascriptInterface
而不是默认注释@JavascriptInterface
用于调用 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>