안드로이드

[Android/Kotlin] 자바스크립스 브릿지 연결하기 (Javascript bridge)[펌]

SojuMan 2021. 3. 16. 10:18

모바일웹과 어플리케이션을 연결시키는 하이브리드 어플리케이션을 만들려면 필요하다.
지금까지 내가 이해한 바로는

html에서 적정한 신호(혹은 문자)를 어플리케이션에 보내서
그 신호를 읽은 어플리케이션에서 구현해놓은것들을 실행하는 수준으로 생각하고 있다.(혹은 반대)

--------------------------------------------------------------------------------------------- Web에서 APP로

-어플리케이션-

private final Handler handler = new Handler();
WebView web;


web.getSettings().setJavaScriptEnabled(true); // 웹뷰에서 자바스크립트 실행가능 하기
web.addJavascriptInterface(new AndroidBridge(), "HybridApp");
//웹뷰에서 해당 브릿지 연결하기 AndroidBridge는 클래스 이름 "HybridApp"는 html의 function이름.
web.loadUrl(url); // 웹뷰에서 url 불러오기
web.setWebViewClient(new CustomWebViewClient()); // 각종 알림 및 요청을 받는 웹뷰
web.setWebChromeClient(new MyWebChromeClient());


private class AndroidBridge {
public void sendMessage() { //sendMessage() -> sendMessage(final String arg)
handler.post(new Runnable() {
public void run() {
//실행할 코딩
}
});
}
}

-HTML-

<head>
<script language="JavaScript">
function sendMessage(){ //
sendMessage(arg)
window.HybridApp.sendMessage(); //
window.HybridApp.sendMessage(msg);
}
</script>
</head>

<a href="#" onclick="sendMessage()">클릭할 객체</a>
//
onclick="sendMessage(document.getElementById('textMessageFromWeb').value)" value="hi"
// id="textMessageFromWeb" 으로 넣으면 value값이 넘어가서 어플리케이션에서 String값으로 전달 받을 수 있다. id와 value값이 한세트.


--------------------------------------------------------------------------------------------- APP에서 WEB으로


-어플리케이션-

web.setWebViewClient(new CustomWebViewClient());
private class CustomWebViewClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
//이곳에 코딩해야 웹뷰 실행시에 작동함.(혹은 버튼)
web.loadUrl("javascript:androidCall()");
//웹에있는 androidCall()이라는 함수를 호출함.
super.onLoadResource(view, url);
}
}

-HTML-

<head>
<script language="JavaScript">
function androidCall() {
//실행할 자바스크립트
}
</script>
</head>