WebView Javascript注入在科尔多瓦插件不工作
问题描述:
我想开发一个Cordova插件,它可以将外部JavaScript注入CordovaWebView。但我无法成功。WebView Javascript注入在科尔多瓦插件不工作
我在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')");
来到科尔多瓦我做了延伸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;
}
我写了UnfoldPlugin.js以及调用cordova.exec方法。 “showLog”和“showToast”这两个动作都被调用,但无法通过JavaScript注入成功获取Toast。
这是科尔多瓦的问题,它不允许通过插件的外部JavaScript注入?
我该如何解决这个问题?帮帮我。
编辑
不过的javascript:window.alert( '世界你好')的作品
@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不与科尔多瓦插件工作。
答
经过几个小时的研究,我找到了答案。希望它可以帮助某人。
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");
}
然后,可以使用带有任何javascript标记的webView.loadUrl()。
接受的答案是你的帮助吗? http://stackoverflow.com/questions/40974950/custom-cordova-plugin-creation-for-ionic2-project – Stallion
没有。没有帮助。 –