Как я могу вызвать встроенную функцию из веб-просмотра Cordova/PhoneGap, например, для показа рекламы.
РЕДАКТИРОВАТЬ: ОК, Я ПОНЯЛ ЭТО, и я собираюсь написать несколько шагов для всех вас, кто не знает, как это сделать (просто чтобы сэкономить 2 дня вашей жизни: D)
A) если у вас есть только кордова/телефонная связь и вы хотите позвонить из js, сделайте следующее:
1) Замените следующий код существующей активностью DroidGap.
@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) Добавьте пользовательскую функцию в текущую (эту) активность следующим образом.
@JavascriptInterface
public void customFunctionCalled() {
Log.e("Custom Function Called", "Custom Function Called");
}
3) Теперь вызовите эту функцию из кода HTML/JavaScript следующим образом.
window.MainActivity.customFunctionCalled();
B.1) если у вас есть 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) Вызовите его из js с помощью `window.JSInterface.showLog();
B.2), если у вас есть кордова/телефонная связь, реализованная в веб-просмотре, и вы хотите позвонить из 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 myFunction()
{
activity.runOnUiThread(new Runnable() {
public void run() {
//Code that interact with UI
showToast();
}
});
}
}
3) Добавьте функцию тоста ниже:
public void showToast(){
Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)",
Toast.LENGTH_LONG).show();
}
4) Вызовите его с помощью `window.JSInterface.myFunction();
Как видите, если вам нужна функция, использующая пользовательский интерфейс, вам нужно обернуть ее в activity.runOnUiThread, чтобы ее можно было вызывать из js.
* Если вы хотите вызвать из java метод jquery, сделайте следующее:
Ява:
cordova_webview.loadUrl("javascript:window.functionn()");
Javascript:
window.function = punish;
Хорошего дня!