android Webivew에서 새창 띄우기
Webview를 연동시 일반적인 페이지 이동이 아닌 새창이 띄워져야 하는데 아무동작이 없어 당황 스러울때가 있습니다.
android에서는 새창으로 띄워지는 동작은 따로 처리가 필요합니다.
기본적으로는 위와같이 새창이 띄워져야 하는경우 WebChromeClien의 onCreateWindow함수가 호출 됩니다. 함수가 호출 되면 새창과 관련 동작을 추가 해주면 아무동작이 없어 당황스러운 상황은 쉽게 해결 됩니다.
웹뷰셋팅을 해줍니다.
웹페이지에서 새창을 띄우는 이벤트가 발생하여 onCreateWindow가 호출 됩니다.
이소스에서의핵심은 새로운 웹뷰를 생성하고 새로운 웹뷰에서 페이지 이동처리를 해준다는 것입니다.
위의 소스는 새창을 외부 브라우저로 띄우는 소스입니다.
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가 호출 됩니다.
이소스에서의핵심은 새로운 웹뷰를 생성하고 새로운 웹뷰에서 페이지 이동처리를 해준다는 것입니다.
위의 소스는 새창을 외부 브라우저로 띄우는 소스입니다.
외부 브라우저가 아닌 앱 내부에서 띄우는 방법은 없나요??
답글삭제새창을 외부 브라우저로 띄우는 것이 아닌 앱 내부에서 띄울 수 있나요?
답글삭제