[안드로이드] WebViewClient와 WebChromeClient

2021. 11. 1. 22:30바삭바삭 IT/안드로이드

웹뷰를 구현하기 할때 WebView객체를 만들게 되는데요, 단순히 WebView객체만 생성하면 화면만 보여질 뿐 웹뷰 속 버튼이나 다른 기능들은 동작하지 못합니다. 웹뷰 속 버튼을 앱에서 제어하기 위해 필요한 구현체들이 바로 WebViewClientWebChromeClient입니다.

 

WebViewClient와 WebChromeClient

먼저 WebViewClient와 WebChromeClient 이 둘의 차이를 알아봅시다.

WebViewClient는 웹페이지를 로딩할때 생기는 콜백함수들로 구성되어 있습니다. 

반면 WebChromeClient는 웹페이지에서 일어나는 액션들에 관한 콜백함수들로 구성되어 있습니다. 예를들면 웹에서 새 창을 띄우려하거나 파일을 첨부하는 경우가 있습니다. 

 

아래는 각 클래스에서 자주 오버라이드 하는 함수들 입니다. 

WebViewClient 함수

함수명 반환 호출 시점 설명
onPageStarted void 페이지가 로딩되는 첫 시점에 한번 호출된다.  
shouldOverridingUrlLoading boolean 웹뷰에서 url이 로딩될때 호출되어 앱에게 제어할 기회를 준다. 앱이 url로딩을 제어할 경우 true를 반환, 그게 아니면 default로 false를 반환한다.
onPageFinished void 페이지 로딩이 끝나면 호출된다.  

WebChromeClient 함수

함수명 반환 호출 시점 설명
onProgressChanged void 페이지가 로딩되는 중간중간 호출된다.  현재 로딩되는 페이지의 상태를 알려준다. 
onCreateWindow boolean 웹에서 새 창을 열때 호출된다. 앱이 새 창을 여는 작업을 하면 true를 반환, 그게 아니면 default로 false를 반환한다.
onCloseWindow void 웹뷰가 창을 닫을 때 호출된다.  
더보기

favicon?

함수 설명을 읽다보면 매개변수에 favicon이 넘어오는 함수들이 있습니다.

favicon은 웹 브라우저 주소창에 표시되는 웹페이지를 대표하는 아이콘 입니다.

자주쓰이는 함수들

경우에 따라 자주쓰이는 함수들입니다. 

경우 1) 웹에서 사용자 이벤트로 새로운 url이 로딩된다 → shouldOverrideUrlLoading()

경우 2) 웹에서 window.open으로 새탭이 열린다 → onCreateWindow()

호출 flow

위에 설명한 내용을 토대로 웹뷰의 전체적인 호출 순서를 도식화 했습니다.

모든 함수를 넣진 못했지만, 가장 많이 쓰이는 함수들로 넣었습니다.

 


 

+ 참고하면 좋은 동영상

7년전 영상이라 참고만 하시길 바랍니다 :)

https://www.youtube.com/watch?v=NiX2vh6JY6s 

 

반응형