首页 > 解决方案 > WebChromeClient.onJsAlert() 如何显示系统对话框?

问题描述

如果 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);
    }

});

我想知道在哪里显示对话框,以及如何在代码中将其关闭。

标签: androidandroid-webview

解决方案


您只需使用该方法即可

  1. 创建并显示AlertDialog
  2. 不要忘记分别在正面负面按钮中调用result.confirm()result.cancel()关闭对话框OnClickListener
  3. 用于return true显示您正在处理 JS 警报。

像这样的东西:

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;
    }
});

推荐阅读