How to handle a webview confirm dialog?

25,887

Solution 1

Ok, found the answer and here it is!

In order to handle a popup confirmation coming from a webpage in your WebView, you need to override the onJsConfirm method in WebChromeClient to display the popup as an Android Alert dialog. Here is the code to do so.

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

Don't forget to set your WebChromeClient in your WebView...

    mWebView.setWebChromeClient(new MyWebChromeClient());

Note.. this isn't my code, but I found it and it works perfectly for handling javascript confirmation dialogs in a WebView!

Cheers!

Solution 2

Thanks Brockoli for the method. I needed this for 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();
    }
}

This back in the activity where webview is created (web_view)

web_view.SetWebChromeClient(new MyWebChromeClient(this));
Share:
25,887

Related videos on Youtube

brockoli
Author by

brockoli

I'm currently working as a software developer for Macadamian Technologies. My current specialization is in Android mobile application development both at the application level and the OS level. We're HIRING!!!! Check out the opportunities to join our team, visit the careers section of our website for details -- or simply Ask Me!

Updated on July 09, 2022

Comments

  • brockoli
    brockoli almost 2 years

    I'm displaying a webpage in a WebView and on the webpage, there is a button. When you click the button, a confirmation dialog is supposed to popup, but it doesn't show in my WebView. It does popup if I go to the same webpage in the android browser. Anyone know how to handle popup dialogs coming from a webpage inside your WebView?

  • Muhammad Mubashir
    Muhammad Mubashir about 11 years
    I have mvc view and <a href="javascript:;" onclick="Logout_Confirm()" id="SignOut">Sign Out</a> but not working on android emulator. I need help in this,
  • Stevie
    Stevie almost 11 years
    Thanks brockoli ... After a bit of experimentation it seems that it is enough to just return false from the onJsConfirm method to have the WebView display a dialog for you - at least in JellyBean ... The default WebChromeClient already returns false, so webView.setWebChromeClient(new WebChromeClient()); did the job for me!