본문 바로가기
안드로이드

WebView에서 외부 브라우저 새 창 띄우기 방법

by 디지털노마더 2020. 11. 14.

안드로이드 개발을 진행하다 보면, WebView을 사용하는 일이 많다.

아래와 같이 뉴스 기사의 원문링크나, 하이퍼텍스트 기능과 같이 링크가 포함된 키워드를 클릭하면 새 창이 띄워지는 것을 원할 때가 있다.

 

<a href target="_blank"> 원문링크 </a>

 

그러나 shouldOverrideUrlLoading()을 사용하기 위해 webView.setWebViewClient(new WebViewClient()); 을 사용할 경우 자동으로 외부 브라우저로 내용을 보여주지 않는다.

 

이러한 경우에는 다음과 같이 처리하면 외부브라우저로 내용을 띄울 수 있다.

 

1. 새 창을 띄우기 위해선, webView.getSettings().setSupportMultipleWindows(true) 로 설정

 

2. setWebChromeClient() 함수 내 onCreateWindow()에 아래와 같이 처리한다.

WebSettings ws = webView.getSettings();
ws.setSupportMultipleWindows(true);

webView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {        
        return super.shouldOverrideUrlLoading(view, url);
    }
});

webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg) {
        Logger.d(TAG, "onCreateWindow ");

        WebView newWebView = new WebView(getContext());
        
        WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj;
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();
        
        return true;
    }
});

 

댓글