1

CordovaWebView에 외부 JavaScript를 삽입 할 수있는 Cordova 플러그인을 개발하려고합니다. 그러나 나는 성공할 수 없다.WebView Javascript 삽입이 Cordova 플러그인에서 작동하지 않습니다.

나는 CordovaActivity를 확장 한 MainActivity에서 똑같이 해봤지만 정상적으로 작동합니다.

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"액션은 모두 호출되지만 자바 스크립트 삽입을 통해 축배를 성공적으로 수행 할 수는 없습니다.

이것은 플러그인을 통해 외부 자바 스크립트 삽입을 허용하지 않는 Cordova의 문제입니까?

이 문제를 어떻게 해결할 수 있습니까? 도움.

편집

그러나 자바 스크립트 :는 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://stackoverflow.com/questions/40974950/custom-cordova-plugin-creation-for-ionic2-project – Stallion

+0

no. didnt 도움. –

답변

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()을 사용할 수 있습니다.