1. 인터페이스 클래스 생성
targetSdkVersion을 17이상이면
@JavascriptInterface를 꼭 추가해야한다.
추가하지 않으면 함수가 동작하지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
|
2. 웹뷰 생성 및 인터페이스 등록
1
2
3
4
5
6
7
|
WebView webView = (WebView) findViewById(R.id.webview);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/testjavascript.html");
|
3. html파일에서 WebAppInterface클래스의 showToast함수 호출.
1
2
3
4
5
6
7
|
<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />
<script type="text/javascript">
function showAndroidToast(toast) {
Android.showToast(toast);
}
</script>
|
4. Say hello버튼을 누르게 되면 'Hello Android!라는 토스트 메시지를 띄우게 된다.
[안드로이드에서 자바스크립트 함수 호출]
1. 안드로이드에서 호출
WebView명.loadUrl("javascript:함수명()");
1 |
mWebView.loadUrl("javascript:setViewAndroid()");
|
2. html파일 자바스크립트 함수 생성
1
2
3
4
5
|
<script type="text/javascript">
function setViewAndroid() {
// 내용
}
</script>
|
[proguard 적용시 제대로 작동하지 않는다면!?]
아래의 내용을 추가해보자.
1
2
3
|
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
|