IT_Programming/Android_Java

[Android] WebView에서 <a> 태그의 "_blank" target 처리하기.

JJun ™ 2014. 5. 7. 19:15



 출처: http://lsit81.tistory.com/147



다음과 같이 <A HREF="newwindow.html" TARGET="_blank"> 태그가 존재할 때

웹뷰에서 외부브라우져로 해당 페이지를 보여주고 싶은 경우가 있다.


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


이 경우에는 다음과 같이 처리하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
WebSettings ws = mWebView.getSettings();
ws.setSupportMultipleWindows(true);
 
mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // .... 내용 처리....
        return super.shouldOverrideUrlLoading(view, url);
    }
});
 
mWebView.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;
    }
});


우선 새창을 띄우기 위해서는 mWebView.getSettings().setSupportMultipleWindows(true)로 설정해 주어야 한다.


그리고 나서 새창으로 띄워야하는 경우가 발생하면 onCreateWindow()로 이벤트가 전달되는대

이때 새로운 WebView를 만들어서 거기서 처리하도록 하고 처리가 끝나면

새로 만들어진 WebView는 참조관계가 끊어져서 자동으로 메모리에서 사라지게끔 만든 것이다.