(Android/안드로이드) WebView JavaScript 호출하는 방법

✨ 개요

WebView 연동에서 가장 기본이면서도 자주 쓰는 기능이 네이티브(Android)에서 웹의 JavaScript 함수를 호출하는 것입니다.


1. 요약


2. 사전 준비: WebView 기본 설정

webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true // 필요 시

3. 가장 권장: evaluateJavascript()로 호출하기 (API 19+)

3.1 단순 호출 (반환값 필요 없음)

window.appInit = function() {
    console.log("init called");
}
fun callAppInit(webView: WebView) {
    webView.post {
        webView.evaluateJavascript("window.appInit && window.appInit();", null)
    }
}
// webView.post {}로 메인 스레드 보장 + WebView attach 상태에서 실행하는 습관이 안전합니다.

3.2 파라미터 전달 (문자열/숫자/JSON)

window.setToken = function(token) {
    console.log("token:", token);
}
import org.json.JSONObject

fun callSetToken(webView: WebView, token: String) {
    val safeToken = JSONObject.quote(token) // JS 문자열 안전 처리 (따옴표/이스케이프)
    val js = "window.setToken && window.setToken($safeToken);"

    webView.post {
        webView.evaluateJavascript(js, null)
    }
}

fun callSetUser(webView: WebView, id: String, name: String) {
    val json = JSONObject().apply {
        put("id", id)
        put("name", name)
    }
    val js = "window.setUser && window.setUser(${json.toString()});"

    webView.post {
        webView.evaluateJavascript(js, null)
    }
}

3.3 반환값 받기 (evaluateJavascript의 강점)

window.getVersion = function() {
    return "1.2.3";
}
fun getWebVersion(webView: WebView, onResult: (String?) -> Unit) {
    webView.post {
        webView.evaluateJavascript("window.getVersion && window.getVersion();") { value ->
            // value는 JSON 형태 문자열로 들어옴. 예: "\"1.2.3\"" 또는 "null"
            onResult(value)
        }
    }
}

4. 보조 방법: loadUrl(“javascript:…”) (레거시)

webView.post {
    webView.loadUrl("javascript:window.appInit && window.appInit();")
}

단점


5. 결론



Related Posts