IT/안드로이드

안드로이드 자바스크립트 함수 호출

조원태 2016. 12. 19. 15:06
반응형
안드로이드 자바스크립트 함수 호출

안드로이드와 자바스크립트 간에 함수를 호출을 하기 위해서 몇가지 설정이 필요합니다.


1. 안드로이드 설정

1.1 MainActivity.java 열기

11.1 private final Handler javascripthandler = new Handler(); 추가

1.2 

WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true); //자바스크립트 허용
webView.addJavascriptInterface(new AndroidBridge(), "MyApp");

추가 MyApp는 웹페이지 안에 자바스크립트에서 사용할 별칭 같은 것입니다. AndroidBridge() 브릿지 클래스를 만들어서 안드로이드와 자바스크립트 간에 함수를 공유합니다.

1.3
private class AndroidBridge {
@JavascriptInterface
public void getJavascriptMessage(final String msg){
javascripthandler.post(new Runnable() {
@Override
public void run() {
Log.e("Webview Message :: " + msg , " MSG");
}
});
}

@JavascriptInterface
public boolean goGoogleMarket(){
javascripthandler.post(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(Intent.ACTION_VIEW);

intent.setData(Uri.parse("market://details?id=" + getPackageName()));
startActivity(intent);
}
});

return true;
}

}

추가 위 클래스가 안드로이드와 자바스크립트 간에 함수를 공유할 부분을 정의하는 것인데요.

@JavascriptInterface

위 코드가 꼭 있어야 합니다.



그렇지 않으면

Uncaught TypeError: Object [object Object] has no method

위 와 같은 에러가 발생합니다.


2. 자바스크립트


function goAppMarket() { var broswerInfo = navigator.userAgent; if(broswerInfo.indexOf("Android")>-1 ){ window.MyApp.goGoogleMarket() ; }

}

2016/12/19 - [IT/안드로이드] - Uncaught TypeError: window.MyApp.goGoogleMarket is not a function",




반응형