【问题标题】:How to handle a webview confirm dialog?如何处理 webview 确认对话框?
【发布时间】:2011-02-13 03:48:51
【问题描述】:

我在 WebView 中显示网页,在网页上,有一个按钮。当您单击按钮时,应该会弹出一个确认对话框,但它不会显示在我的 WebView 中。如果我在 android 浏览器中访问相同的网页,它会弹出。任何人都知道如何处理来自 WebView 内网页的弹出对话框?

【问题讨论】:

    标签: android dialog webview popup handle


    【解决方案1】:

    好的,找到答案了!

    为了在 WebView 中处理来自网页的弹出确认,您需要覆盖 WebChromeClient 中的 onJsConfirm 方法,以将弹出窗口显示为 Android 警报对话框。这是执行此操作的代码。

    final Context myApp = this; 
    final class MyWebChromeClient extends WebChromeClient {
        @Override
        public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
            new AlertDialog.Builder(myApp)
            .setTitle("App Titler")
            .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()
            {
                public void onClick(DialogInterface dialog, int which)
                {
                    result.cancel();
                }
            })
            .create()
            .show();
    
            return true;
        }
    }
    

    别忘了在你的 WebView 中设置你的 WebChromeClient...

        mWebView.setWebChromeClient(new MyWebChromeClient());
    

    注意.. 这不是我的代码,但我找到了它,它非常适合在 WebView 中处理 javascript 确认对话框!

    干杯!

    【讨论】:

    • 我有 mvc 视图和 Sign Out 但不适用于 android 模拟器。我需要这方面的帮助,
    • 谢谢 brockoli ... 经过一些实验后,似乎只需从 onJsConfirm 方法返回 false 就足以让 WebView 为您显示一个对话框 - 至少在 JellyBean 中...默认 WebChromeClient 已经返回 false,所以 webView.setWebChromeClient(new WebChromeClient()); 为我完成了这项工作!
    【解决方案2】:

    感谢 Brockoli 提供的方法。 Xamarin.Android 需要这个

     public class MyWebChromeClient : WebChromeClient
    {
        private Context mContext;
        private JsResult res;
    
        public MyWebChromeClient(Context context)
        {
            mContext = context;
        }
    
    
         public override bool OnJsConfirm(WebView view, string url, string message, JsResult result)
        {
    
            res = result;
    
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.SetTitle("Confirm:");
            builder.SetMessage(message);
            builder.SetPositiveButton(Android.Resource.String.Ok,  OkAction);
            builder.SetNegativeButton(Android.Resource.String.Cancel, CancelAction);
            builder.Create();
            builder.Show();
    
            return true;
    
    
            //return base.OnJsConfirm(view, url, message, result);
        }
    
        private void CancelAction(object sender, DialogClickEventArgs e)
        {
            res.Cancel();
        }
    
        private void OkAction(object sender, DialogClickEventArgs e)
        {
            res.Confirm();
        }
    }
    

    这回到创建 webview 的 Activity (web_view)

    web_view.SetWebChromeClient(new MyWebChromeClient(this));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-17
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      • 1970-01-01
      相关资源
      最近更新 更多