Android WebViewClient vs WebChromeClient 차이

✨ 개요

안드로이드에서 WebView를 제대로 쓰려면 WebViewClientWebChromeClient의 역할을 정확히 구분해야 합니다.
둘을 섞어 쓰면 “링크 전환/에러/SSL/내부 네비게이션”과 “프로그레스/파일 업로드/JS 다이얼로그/퍼미션/전체화면 영상”을 깔끔하게 나눌 수 있습니다.


1 한 줄 정의

구분 WebViewClient WebChromeClient
목적 네비게이션 & 로딩 수명주기 제어 브라우저 UI & 고급 기능 제어
대표 콜백 shouldOverrideUrlLoading, onPageStarted/Finished, onReceivedError, onReceivedSslError, shouldInterceptRequest onProgressChanged, onShowFileChooser, onJsAlert/Confirm/Prompt, onConsoleMessage, onPermissionRequest, onReceivedTitle/Icon, onShowCustomView/onHideCustomView
언제 쓰나 내부/외부 링크 분기, 에러화면, SSL 대응, 헤더 주입/리소스 가로채기 진행바, 파일 업로드, JS 팝업, 카메라/마이크/지오로케이션 권한, 전체화면 동영상

핵심: 페이지 이동/로드는 WebViewClient, 브라우저스러운 UI는 WebChromeClient.


2 올바른 사용” 체크리스트

WebViewClient 쪽

WebChromeClient 쪽


3 보안/안정성 팁

WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG)
WebSettingsCompat.setSafeBrowsingEnabled(webView.settings, true)
webView.settings.mixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW

4 최소예제

class MyActivity : AppCompatActivity() {
    private lateinit var webView: WebView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        webView = WebView(this)
        setContentView(webView)
        webView.setupForApp { progress -> /* progress bar */ }
        webView.loadUrl("https://www.my-domain.com")
    }
}

5 결론



Related Posts