【发布时间】:2014-09-02 04:24:18
【问题描述】:
如何从 cordova/phonegap webview 调用本机函数,例如显示广告。
编辑:好的,我完全明白了,我将为所有不知道该怎么做的人写一些步骤(只是为了节省你一生中的 2 天时间:D)
A) 如果您只有 cordova/phonegap 并且希望从 js 调用,请执行以下操作:
1) 将以下代码替换为您现有的 DroidGap Activity。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.init(); // Calling this is necessary to make this work
appView.addJavascriptInterface(this, "MainActivity");
/* "this" points the to the object of the current activity. "MainActivity" is used to refer "this" object in JavaScript as in Step 3. */
super.loadUrl("file:///android_asset/www/index.html");
}
2) 在当前 (this) 活动中添加自定义函数,如下所示。
@JavascriptInterface
public void customFunctionCalled() {
Log.e("Custom Function Called", "Custom Function Called");
}
3) 现在从您的 HTML/JavaScript 代码中调用此函数,如下所示。
window.MainActivity.customFunctionCalled();
B.1) 如果您在 web 视图中实现了 cordova/phonegap 并希望从 js 调用,请执行以下操作: (并想调用普通函数)
1) 将此添加到主 java 文件中:
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
2) 声明类 JavaScriptInterface:
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
@JavascriptInterface
public void showLog(){
Log.v("blah", "blah blah");
}
}
3) 用 `window.JSInterface.showLog() 从 js 调用它;
B.2) 如果您在 web 视图中实现了 cordova/phonegap 并希望从 js 中调用(并且想要调用 UI 函数,例如 toast),请执行以下操作:
1) 将此添加到主 java 文件中:
JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");
2) 声明类 JavaScriptInterface:
public class JavaScriptInterface {
private Activity activity;
public JavaScriptInterface(Activity activiy) {
this.activity = activiy;
}
@JavascriptInterface
public void myFunction()
{
activity.runOnUiThread(new Runnable() {
public void run() {
//Code that interact with UI
showToast();
}
});
}
}
3) 在下面添加toast函数:
public void showToast(){
Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)",
Toast.LENGTH_LONG).show();
}
4) 使用 `window.JSInterface.myFunction(); 调用它
如您所见,如果您需要一个使用 UI 的函数,您需要将您的函数包装到 activity.runOnUiThread 中,以便可以从 js 中调用它。
*如果你想从 java 调用 jquery 方法,这样做:
Java:
cordova_webview.loadUrl("javascript:window.functionn()");
Javascript:
window.function = punish;
祝你有美好的一天!
【问题讨论】:
标签: android cordova webview cordova-3 cordova-2.0.0