Android WebChromeClient.onJsAlert()如何显示系统对话框?

Android WebChromeClient.onJsAlert()如何显示系统对话框?,android,android-webview,Android,Android Webview,如果H5在android webview中显示警报,我们可以覆盖WebChromeClient().onJsAlert()以如下方式显示android对话框: webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return s

如果H5在android webview中显示警报,我们可以覆盖
WebChromeClient().onJsAlert()
以如下方式显示android对话框:

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

});
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, final String url, String message, JsResult result) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setMessage(message)
                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        result.confirm();
                        dialog.dismiss();
                    }
                })
                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        result.cancel();
                        dialog.dismiss();
                    }
                }).show();

        return true;
    }
});

我想知道在哪里显示该对话框,以及如何在代码中消除它。

您只需使用该方法即可

  • 创建并显示
    警报对话框
  • 当对话框分别在肯定或否定按钮
    OnClickListener
    中取消时,不要忘记调用
    result.confirm()
    result.cancel()
  • 使用
    return true
    显示您正在处理JS警报
  • 大概是这样的:

    webView.setWebChromeClient(new WebChromeClient(){
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            return super.onJsAlert(view, url, message, result);
        }
    
    });
    
    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public boolean onJsAlert(WebView view, final String url, String message, JsResult result) {
            AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
            builder.setMessage(message)
                    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                            dialog.dismiss();
                        }
                    })
                    .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            result.cancel();
                            dialog.dismiss();
                        }
                    }).show();
    
            return true;
        }
    });