본문 바로가기

Programming/Android

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가 호출 됩니다.
이소스에서의핵심은 새로운 웹뷰를 생성하고 새로운 웹뷰에서 페이지 이동처리를 해준다는 것입니다.
위의 소스는 새창을 외부 브라우저로 띄우는 소스입니다.