2014-07-11 2 views
0

cordova/phonegap webview에서 네이티브 함수를 호출하는 방법 (예 : 광고 게재).cordova에서 네이티브 함수를 호출하는 방법 3.x

편집 : 나는 FUNALLY 그것을 가지고 내가 그 (당신의 일생 2 일 여유 : D)을 수행하는 방법을 모르는 당신의 모두를위한 몇 가지 단계 쓸거야 OK

A)를 만약 당신이 cordova/phonegap을 가지고 있고 js에서 전화하고 싶다면 :

1) 다음 코드를 기존 DroidGap 활동으로 대체하십시오.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    super.init(); // Calling this is necessary to make this work 
    appView.addJavascriptInterface(this, "MainActivity"); 

    /* "this" points the to the object of the current activity. "MainActivity" is used to refer "this" object in JavaScript as in Step 3. */ 

    super.loadUrl("file:///android_asset/www/index.html"); 
} 

2) 현재 (this) 활동에 다음과 같이 사용자 정의 함수를 추가하십시오.

@JavascriptInterface 
public void customFunctionCalled() { 
    Log.e("Custom Function Called", "Custom Function Called"); 
} 

3) 이제이 기능을 HTML/JavaScript 코드에서 다음과 같이 호출하십시오. 당신은 웹보기에서 구현 코르도바/폰갭을 가지고 JS에서 호출하고자하는 경우

window.MainActivity.customFunctionCalled(); 

B.1)이 수행 를 (그리고)

1) 일반 함수를 호출 메인이 추가하려면 자바 파일 :

public class JavaScriptInterface { 
    private Activity activity; 

    public JavaScriptInterface(Activity activiy) { 
     this.activity = activiy; 
    } 

    @JavascriptInterface 
    public void showLog(){ 
     Log.v("blah", "blah blah"); 
    } 

} 
:

JavaScriptInterface jsInterface = new JavaScriptInterface(this); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.addJavascriptInterface(jsInterface, "JSInterface"); 

2) 클래스 JavaScriptInterface 선언3) js에서 window.JSInterface.showLog();로 호출한다.

B.2)는 웹뷰에서 구현 코르도바/폰갭을 가지고 (JS에서 호출 할과) 토스트처럼, UI 함수를 호출 할이 작업을 수행 할 경우 :

1) 메인이 추가 자바 파일 :

public class JavaScriptInterface { 
    private Activity activity; 

    public JavaScriptInterface(Activity activiy) { 
     this.activity = activiy; 
    } 

    @JavascriptInterface 
    public void myFunction() 
    { 
     activity.runOnUiThread(new Runnable() { 
      public void run() { 
       //Code that interact with UI 
       showToast(); 
      } 
     }); 

    } 

} 

3) 아래에 토스트 기능 추가 :

JavaScriptInterface jsInterface = new JavaScriptInterface(this); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.addJavascriptInterface(jsInterface, "JSInterface"); 

2) 클래스 JavaScriptInterface 선언

public void showToast(){ 
    Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)", 
       Toast.LENGTH_LONG).show(); 
} 

4)`window.JSInterface.myFunction();

UI를 사용하는 함수가 필요한 경우 activity.runOnUiThread에 함수를 래핑하여 js에서 호출 할 수 있도록해야합니다. 당신이 자바에서 호출 할 경우

* JQuery와 방법은이 작업을 수행 :

자바 :

cordova_webview.loadUrl("javascript:window.functionn()"); 

자바 스크립트 :

window.function = punish; 

이 좋은 하루 되세요!

답변

0

.자바 스크립트

window.MainActivity.customFunctionCalled(); 

이 자바 파일

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    super.init(); // Calling this is necessary to make this work 

    appView.addJavascriptInterface(this, "MainActivity"); 

    super.loadUrl(Config.getStartUrl()); 

} 

은 TargetSDK < 17에서 작동합니다. androidManifest.xml targetSDK는 <으로 설정해야합니다. 17. TargetSDK> = 17 인 경우 일부 맞춤 플러그인을 만들어야합니다. 이제이 과정을 통해 타겟 SDK를 낮추었습니다.

+0

super.init()를 사용할 수 없기 때문에 pgonegap을 webview에 통합했습니다. 선을 추가하면 오류가 발생하며 앱을 빌드 할 수 없습니다. –

+0

무엇이 오류입니까? –

관련 문제