android Webivew에서 새창 띄우기

Webview를 연동시 일반적인 페이지 이동이 아닌 새창이 띄워져야 하는데 아무동작이 없어 당황 스러울때가 있습니다.
android에서는 새창으로 띄워지는 동작은 따로 처리가 필요합니다.
기본적으로는 위와같이 새창이 띄워져야 하는경우 WebChromeClien의 onCreateWindow함수가 호출 됩니다. 함수가 호출 되면 새창과 관련 동작을 추가 해주면 아무동작이 없어 당황스러운 상황은 쉽게 해결 됩니다.

webview = (WebView) findViewById(R.id.webview);

        WebSettings settings = webview.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setSupportMultipleWindows(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);

웹뷰셋팅을 해줍니다.
webview.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onCreateWindow(final WebView view, boolean dialog,  
                                                                    boolean userGesture, Message resultMsg)
            {
                WebView newWebView = new WebView(MainActivity.this);
                WebView.WebViewTransport transport 
                              = (WebView.WebViewTransport) resultMsg.obj;
                transport.setWebView(newWebView);
                resultMsg.sendToTarget();

                newWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        Intent browserIntent = new Intent(Intent.ACTION_VIEW);
                        browserIntent.setData(Uri.parse(url));
                        startActivity(browserIntent);
                        return true;
                    }
                });

                return true;
            }

        });

웹페이지에서 새창을 띄우는 이벤트가 발생하여 onCreateWindow가 호출 됩니다.
이소스에서의핵심은 새로운 웹뷰를 생성하고 새로운 웹뷰에서 페이지 이동처리를 해준다는 것입니다.
위의 소스는 새창을 외부 브라우저로 띄우는 소스입니다.



댓글

  1. 외부 브라우저가 아닌 앱 내부에서 띄우는 방법은 없나요??

    답글삭제
  2. 새창을 외부 브라우저로 띄우는 것이 아닌 앱 내부에서 띄울 수 있나요?

    답글삭제

댓글 쓰기

주간 인기글

[정보] 인스타그램은 당신의 소리를 '듣고' 있을 수도 있습니다

안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기

[앱 디자인] 벤치마킹에 유용한 사이트

[앱 디자인] 디자인 가이드 만들기 - 아이폰

[AWS] WinSCP 를 이용해 Linux 인스턴스로 파일 전송하기