블로그

[안드로이드] 웹뷰(WebView 에서 자바스크립트 confirm 띄우기

웹뷰로 구성된 화면에서 자바스크립트로 confirm 메시지를 띄울때 WebViewClient 로만 구성할 경우 confirm 메시지가 뜨지 않습니다.

이 경우는 기존의 WebViewClient 는 그대로 두고 추가로 WebChromeClient 를 추가해 주면 됩니다.

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String overrideUrl) {
        view.stopLoading();
        view.loadUrl(overrideUrl);
        return false;
    }

    public void onReceivedError(WebView view, int errorCode, String description, String fallingUrl) {
        view.loadData("<html><body></body></html>", "text/html", "UTF-8");
    }
});

위 코드는 기존의 WebViewClient 를 사용한 경우입니다. WebChromeClient 를 추가해 줍니다.

webView.setWebChromeClient(new WebChromeClient() {
    @Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {

    new AlertDialog.Builder(app)
            .setTitle("title")
            .setMessage(message)
            .setPositiveButton(android.R.string.ok,
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    })
            .setNegativeButton(android.R.string.cancel,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            result.cancel();
                        }
                    })
            .setCancelable(false)
            .create()
            .show();
    return true;
}

setCancelable(false) 옵션을 제거하면 confirm 다이얼로그 외부를 클릭시 앱이 먹통이 될 수 있으니 주의합니다.

2017-06-05 목록