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不与科尔多瓦插件工作。

+0

接受的答案是你的帮助吗? http://*.com/questions/40974950/custom-cordova-plugin-creation-for-ionic2-project – Stallion

+0

没有。没有帮助。 –

经过几个小时的研究,我找到了答案。希望它可以帮助某人。

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()。