Notice
Recent Posts
Recent Comments
Link
투케이2K
187. (TWOK/WORK) [업무 이슈] 안드로이드 웹뷰 setWebChromeClient 중복 선언으로 인한 자바스크립트 이벤트 이상 동작 이슈 본문
투케이2K 업무정리
187. (TWOK/WORK) [업무 이슈] 안드로이드 웹뷰 setWebChromeClient 중복 선언으로 인한 자바스크립트 이벤트 이상 동작 이슈
투케이2K 2025. 10. 28. 19:15728x90
[제 목]
[업무 이슈] 안드로이드 웹뷰 setWebChromeClient 중복 선언으로 인한 자바스크립트 이벤트 이상 동작 이슈
[내 용]
------------------------------------------------------------------------------
[개발 및 테스트 환경]
------------------------------------------------------------------------------
- 제 목 : [업무 이슈] 안드로이드 웹뷰 setWebChromeClient 중복 선언으로 인한 자바스크립트 이벤트 이상 동작 이슈
- 테스트 환경 : Mobile / Samsung / Android / Webview / Chrome / JavaScript
- 사전) 안드로이드 setWebChromeClient 함수 간략 설명 :
>> 안드로이드에서 setWebChromeClient()는 WebView의 브라우저 기능을 확장하거나 자바스크립트와의 상호작용을 처리하기 위해 사용되는 메서드입니다
>> setWebChromeClient()는 WebChromeClient 객체를 WebView에 설정하여 다양한 고급 기능을 사용할 수 있게 해줍니다
>> WebChromeClient가 처리하는 주요 기능 :
- onJsAlert() : 자바스크립트 alert() 호출 시 처리
- onJsConfirm() : 자바스크립트 confirm() 호출 시 처리
- onJsPrompt() : 자바스크립트 prompt() 호출 시 처리
- onProgressChanged() : 페이지 로딩 진행률 표시
- onReceivedTitle() : 웹페이지의 제목(title) 수신
- onConsoleMessage() : 자바스크립트 console.log() 메시지 처리
- onShowFileChooser() : 파일 업로드 input 처리 (<input type="file">)
- onPermissionRequest() : 웹에서 권한 요청 처리 (예: 카메라, 마이크 등)
- 사전) 안드로이드 Build.gradle 설정 사항 :
android {
// [컴파일 버전]
compileSdk 34
// [Config 셋팅]
defaultConfig {
// ----------------------------
applicationId "com.example.appproject" // 앱 아이디
// ----------------------------
versionCode 1 // 빌드 버전
// ----------------------------
versionName '1.0.1' // 빌드 네임
// ----------------------------
minSdk 24 // 최소 빌드 버전
// ----------------------------
targetSdk 34 // TODO 타겟 빌드 버전
// ----------------------------
}
// [컴파일 자바 버전 지정]
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// [아파치 http 사용 설정]
useLibrary ('org.apache.http.legacy')
}
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------
1. 안드로이드 웹뷰 객체 생성 시 setWebChromeClient 중복 선언으로 인한 자바스크립트 alert 및 input keyboard 이벤트 이상 동작 이슈
2. 안드로이드 웹뷰 setWebChromeClient 중복 선언 코드 :
webView.setWebChromeClient(new WebChromeClient()); // Default
webView.setWebChromeClient(new WebChromeClient() { // Custom
// 커스텀 구현
});
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------
1. 안드로이드 웹뷰 객체 생성 시 setWebChromeClient 중복 선언 방식으로 웹뷰 로드 수행 실시
2. 사용자 이름을 입력하는 웹 input 박스 터치 시 focus 상태가 되지 않고, keyboard 키보드도 올라오지 않는 것 확인
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------
1. 안드로이드에서 setWebChromeClient 를 중복 선언하지 않고 Custom 구현 부분만 지정
// webView.setWebChromeClient(new WebChromeClient()); // Default : 주석 처리
webView.setWebChromeClient(new WebChromeClient() { // Custom
// 커스텀 구현
});
2. 안드로이드 웹뷰 로드 후 사용자 이름 입력 input 박스 터치 시 정상적으로 focus 활성 및 keyboard 키보드가 올라오는 것 확인
3. 추가 setWebChromeClient 중복 선언 시 문제가 생길 수 있는 이슈 정리 :
>> 자바스크립트 이벤트가 정상 동작하지 않을 수 있음 :
- WebChromeClient 는 자바스크립트 alert(), confirm(), console.log(), onProgressChanged() 등 다양한 브라우저 이벤트를 처리합니다.
- 만약 두 번째 선언에서 필요한 콜백을 구현하지 않았다면, 해당 이벤트가 처리되지 않거나 무시될 수 있습니다.
- 예를 들어 onJsAlert()를 구현하지 않으면 alert() 호출 시 아무 반응이 없을 수 있습니다.
>> 웹뷰 로드 문제 :
- WebChromeClient 자체가 로딩에 직접적인 영향을 주는 건 아니지만, onProgressChanged()를 통해 로딩 상태를 UI에 반영하는 경우가 많습니다.
- 이 메서드가 누락되면 로딩 프로그레스 바가 동작하지 않거나, 로딩 완료 여부를 판단하기 어려울 수 있습니다.
------------------------------------------------------------------------------
------------------------------------------------------------------------------
[참고 사이트]
------------------------------------------------------------------------------
[안드로이드 디벨로퍼 : WebChromeClient 설명]
https://developer.android.com/reference/android/webkit/WebChromeClient
[스택 오버플로우 : setWebViewClient와 setWebChromeClient의 차이점은 무엇인가요?]
https://stackoverflow.com/questions/2835556/whats-the-difference-between-setwebviewclient-vs-setwebchromeclient
------------------------------------------------------------------------------
728x90
반응형
'투케이2K 업무정리' 카테고리의 다른 글
Comments
