Как обрабатывать диалог подтверждения веб-просмотра? - PullRequest
20 голосов
/ 28 апреля 2010

Я отображаю веб-страницу в WebView, и на веб-странице есть кнопка. Когда вы нажимаете кнопку, должно появиться диалоговое окно подтверждения, но оно не отображается в моем WebView. Это всплывающее окно, если я захожу на ту же веб-страницу в браузере Android. Кто-нибудь знает, как обрабатывать всплывающие диалоги, приходящие с веб-страницы внутри вашего WebView?

Ответы [ 2 ]

44 голосов
/ 28 апреля 2010

Хорошо, нашёл ответ и вот он!

Чтобы обработать всплывающее подтверждение, поступающее с веб-страницы в вашем WebView, вам необходимо переопределить метод onJsConfirm в WebChromeClient, чтобы отобразить всплывающее окно в виде диалога Android Alert. Вот код для этого.

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

Не забудьте установить свой WebChromeClient в вашем WebView ...

    mWebView.setWebChromeClient(new MyWebChromeClient());

Обратите внимание ... это не мой код, но я нашел его, и он отлично работает для обработки диалогов подтверждения JavaScript в WebView!

Ура!

1 голос
/ 10 июля 2018

Спасибо Броколи за метод. Мне это нужно для 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();
    }
}

Это снова в упражнении, где создается веб-просмотр (web_view)

web_view.SetWebChromeClient(new MyWebChromeClient(this));
...