안드로이드 WebView를 사용하다보면 웹뷰에서 다른 외부 링크를 클릭시 다른 웹사이트를 경유하게 되는 경우가 있다. 하지만, 이때 웹뷰에서 에러나 다른 외부 링크가 제대로 열리지 않는 경우가 많아 이럴때 다르게 동작할 수 있도록 하는 팁을 알게되었고 공유하고자 한다.

 

 

WebView 그대로 사용시

 

1. 내부 Url 로 WebView 실행 

2. 내부에 있는 외부 링크 접속시 WebViewClient에서 제대로 동작하지 않는 부분 발생.

웹사이트 하단 부분이 계속 스크롤 되지만 아무것도 없는 뷰를 보여준다.

 

WebView 해결방법

 

위 오류를 해결하기 위해서는 내부 Url을 만날때만 Webview로 동작하게 하고, 나머지 외부 링크는 크롬탭에서 볼 수 있도록 변경 하였다. 

아래 페이지의 코드를 참고하였다.

 

Build web apps in WebView  |  Android Developers

If you want to deliver a web application (or just a web page) as a part of a client application, you can do it using WebView. The WebView class is an extension of Android's View class that allows you to display web pages as a part of your activity layout.

developer.android.com

 

webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
    ): Boolean {
        // request는 url 호출시마다 변경됨
        val url = request?.url ?: return false
								
        // webUrl = "www.example.com/~~" 
        // 내부 url일 경우 webview 사용
        if (Uri.parse(webUrl).host == url.host) {
            return false
         }
								
        // 외부 url일 경우 크롬탭으로 실행
        val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url.toString()))
        startActivity(intent)
        return true
}

위처럼 코드를 구성해주면 외부 링크일때는 크롬탭으로 작동하는것을 알 수 있다.

 

외부 링크를 크롬탭으로 실행했을때 잘 동작하는 모습

WebView를 잘 사용해 보자

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기