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. 새창을 외부 브라우저로 띄우는 것이 아닌 앱 내부에서 띄울 수 있나요?

    답글삭제

댓글 쓰기

주간 인기글

네이버 클라우드 SENS 활용 SMS 발송을 위한 법인 발신번호 등록

[social 연동]웹 환경에서 Social 연동해서 로그인하기 - Facebook 1) App Key 발급

[AWS] ACM (Amazon Certificate Manager)를 통한 SSL 적용 웹사이트 구성

[AWS] Bastion Host 를 활용한 SSH 접근통제 #1

[AWS] SSL 인증서 요청시 DNS 검증방법 사용하기