CordovaWebViewに外部JavaScriptを注入できるCordovaプラグインを開発しようとしています。しかし、私は成功することができません。WebView JavascriptインジェクションがCordovaプラグインで動作しません
私はMainActivityでCordovaActivityを拡張して同じことを試しましたが、これはうまく動作します。
Heres私がやったこと。
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')");
はコルドバに来て、私はCordovaPlugin拡張MyPluginと呼ばれるプラグインを作って、メソッドを実行overided。
@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;
}
私はcordova.execメソッドを呼び出すだけでなくUnfoldPlugin.jsを書かれています。アクション "showLog"と "showToast"の両方が呼び出されますが、javascriptインジェクションを介してトーストを取得することはできません。
これは、プラグインを介して外部のJavaScriptの注入を許可しないCordovaの問題ですか?
どうすればこの問題を解決できますか?助けて。
編集
しかしジャバスクリプト:のwindow.alert( 'Hello Worldのは')私はaddJavascriptInterfaceはコルドバプラグインで機能していないと思う
@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;
}
に動作します。
受け入れられた回答はあなたの助けになるでしょうか? http://stackoverflow.com/questions/40974950/custom-cordova-plugin-creation-for-ionic2-project – Stallion
役に立たなかった –