CefSharp Handle alerts, confirms, and prompts
I recently needed to make use of CefSharp library to implement my own Chrome-based browser and had to hook or handle javascript alerts, confirms and prompts. This was how I did it, in case any of you find yourself needing it.
You will need to implement your own class which extends the
IJsDialogHandler
interface
public class JsHandler : IJsDialogHandler
{
public void OnDialogClosed(IWebBrowser browserControl, IBrowser browser)
{
throw new NotImplementedException();
}
public bool OnJSAlert(IWebBrowser browser, string url, string message)
{
MessageBox.Show("Alert Detected. Url : " + url + " \n message : " + message);
return false;
}
public bool OnJSBeforeUnload(IWebBrowser browserControl, IBrowser browser, string message, bool isReload, IJsDialogCallback callback)
{
throw new NotImplementedException();
}
public bool OnJSConfirm(IWebBrowser browser, string url, string message, out bool retval)
{
MessageBox.Show("Confirm Detected. Url : " + url + " \n message : " + message);
retval = false;
return false;
}
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage)
{
throw new NotImplementedException();
}
public bool OnJSPrompt(IWebBrowser browser, string url, string message, string defaultValue, out bool retval, out string result)
{
MessageBox.Show("Prompt Detected. Url : " + url + " \n message : " + message);
retval = false;
result = "";
return false;
}
public void OnResetDialogState(IWebBrowser browserControl, IBrowser browser)
{
throw new NotImplementedException();
}
}
And then in your
ChromiumWebBrowser
instance,
JsHandler jh = new JsHandler();
browser.JsDialogHandler = jh;
Be First to Comment