본문 바로가기

나의 플랫폼/안드로이드

[Android] WebView에서 Javascript Alert 창이 보이지 않을 때

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

아래는 제가 WebView를 셋팅하는 소스 입니다.


// Enable pinch to zoom without the zoom buttons
mWebView.getSettings().setBuiltInZoomControls(true);
// Enable pinch to zoom without the zoom buttons
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
// Hide the zoom controls for HONEYCOMB+
mWebView.getSettings().setDisplayZoomControls(false);
}
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH)
mWebView.getSettings().setTextZoom(100);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
mWebView.loadUrl(mBean.content);


setJavaScriptEnabled를 true 하는 것만으로 Alert창이 뜨지 않습니다.

WebView를 ChromeClient로도 사용을 해야 Alert창이 뜨게 됩니다.

즉, ChromeClient의 콜백 함수를 통해 Alert 창이 뜨게 되는 거죠.


아래 함수를 보겠습니다.

mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});

onJsAlert 콜백 함수가 WebView에서 Alert창을 호출 했을때 넘어오게 됩니다.

이때 부모 클래스인 WebChromeClient에서 Dialog를 띄어주게 되는 거죠.

즉, Web Dialog가 아니라 App Dialog가 뜨는 겁니다.


참고로!!


setWebViewClient를 해주면, WebView에 웹페이지를 출력하게 됩니다.

setWebViewClient를 사용하지 않으면 브라우저 선택창이 뜨게 되는 거죠.


그래서 아래와 같이 setWebChromeClient와 setWebViewClient를 같이 설정을 하면

WebView 상에서 Chrome 브라우저와 같은 동작이 이뤄지게 되는거죠.


mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());



참고하세요.