25

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

4

2 回答 2

52

好的,找到了答案,就在这里!

为了在 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 确认对话框!

干杯!

于 2010-04-28T02:41:08.747 回答
2

感谢布罗科利的方法。我需要这个用于 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 的活动 (web_view)

web_view.SetWebChromeClient(new MyWebChromeClient(this));
于 2018-07-10T16:24:42.240 回答