Внедрение Javascript в WebView не работает в плагине Cordova
Я пытаюсь разработать плагин Cordova, который может внедрить внешний JavaScript в CordovaWebView. Но я не могу добиться успеха.
Я попробовал то же самое в MainActivity, которая расширяет CordovaActivity, работает нормально.
Вот что я сделал.
Класс WebAppInterface
private class WebAppInterface {
private final Context context;
WebAppInterface(Context context) {
this.context = context;
}
@JavascriptInterface
public void showToast(String toastMsg) {
Toast.makeText(context, toastMsg, Toast.LENGTH_SHORT).show();
}
}
Код впрыска
WebSettings webSettings = ((WebView)appView.getEngine.getView()).getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new WebAppInterface(webView.getContext()), "android");
myWebView.loadUrl("javascript:android.showToast('Toast 1')");
Подходя к кордовой, я сделал плагин MyPlugin, расширяющий CordovaPlugin, и метод overided execute.
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if ("showLog".equals(action)) {
Log.d("showLog", "showLog");
return true;
}
if ("showToast".equals(action)) {
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
WebView webView = (WebView) UnfoldPlugin.this.webView.getEngine().getView();
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(webView.getContext()), "android");
webView.loadUrl("javascript:android.showToast('Hello World')");
}
});
return true;
}
return false;
}
Я также написал UnfoldPlugin.js, вызвав метод cordova.exec. Оба действия "showLog" и "showToast" вызываются, но не в состоянии преуспеть в получении тоста посредством внедрения javascript.
Это проблема Cordova, которая не позволяет вводить внешний javascript через плагин?
Как мне решить эту проблему? Помогите.
редактировать
Однако javascript:window.alert("Hello World") работает
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if ("showToast".equals(action)) {
cordova.getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:window.alert('Hello World')");
}
});
callbackContext.success();
return true;
}
Я думаю, что addJavascriptInterface не работает с плагином Cordova.
1 ответ
После нескольких часов исследований я нашел ответ. Надеюсь, это может кому-то помочь.
Метод addJavascriptInterface должен вызываться внутри инициализации.
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
WebView webView = (WebView) UnfoldPlugin.this.webView.getEngine().getView();
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new WebAppInterface(webView.getContext()), "android");
}
Затем можно использовать webView.loadUrl() с любым тегом javascript.