javascript에서 App에 있는 함수를 호출하기 위해서는 함수에 아래와 같은 Annotation이 있어야한다.
@android.webkit.JavascriptInterface
webView에 사용할 인터페이스를 설정해야한다.
JS라는 클래스를 사용하고, HTML에서 "js"라는 이름으로 호출 하겠다는 설정을 해준다.
webView.addJavascriptInterface(new JS(), "js");
final class JS {
JS() { }
@android.webkit.JavascriptInterface
public void clickJS(String a) {
textView.setText(a);
Log.d("[35]", "Event process........... " + a);
}
}
Web에서 window.js로 App 함수 호출하는 방법
<!-- HTML5 -->
<button onclick = "window.js.clickJS('Web message')">Android Call</button>
App에서 Web에 있는 javascript 함수를 호출하는 방법
// 오류 발생하는 경우
// webView 는 새로운 Thread에서 실행시킬 수 없다.
// 아래와 같이 새로운 Thread를 생성하면 오류가 발생한다.
// All WebView methods must be called on the same thread.
public void clickBt(View v) {
new Thread(
new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:changeImg()");
}
}
).start();
}
// 전역으로 Handler를 선언해서 사용한다.
Handler handler = new Handler();
// 핸들러를 통해 javascript 함수를 호출
public void clickBt(View v) {
handler.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:changeImg()");
}
});
}