在 Cefsharp 浏览器中避免 Js Alert 问题
Issue Avoiding Js Alert in Cefsharp browser
我试图避免页面上的 js 警告,因为它会中断流程并且浏览器会卡在该页面上,直到单击弹出窗口。
我添加了 Class,如样本所示:
public class JsDialogHandler : IJsDialogHandler
{
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage)
{
return true;
}
public bool OnJSBeforeUnload(IWebBrowser browserControl, IBrowser browser, string message, bool isReload, IJsDialogCallback callback)
{
return true;
}
public void OnResetDialogState(IWebBrowser browserControl, IBrowser browser)
{
}
public void OnDialogClosed(IWebBrowser browserControl, IBrowser browser)
{
}
}
我将 Chromium 浏览器分配为:
CefSharp.Cef.Initialize(new CefSharp.CefSettings());
browser = new CefSharp.WinForms.ChromiumWebBrowser(CustomLinks[0].ToString());
JsDialogHandler jss = new JsDialogHandler();
browser.JsDialogHandler = jss;
事情是当警报应该显示它执行 运行 OnJSDialog
事件时。但随后浏览器变白并卡住并试图找到解决方法但在线可用的内容不多..
有什么建议吗?
在处理程序的 OnJSDialog
方法中,确保在回调中调用 Continue(...)
:
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage) {
callback.Continue(true);
return true;
}
如果您只想禁用 javascript 警报,可以使用参数 suppressMessage
:
// Implementation of IJsDialogHandler
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage)
{
suppressMessage = true;
return false;
}
// All other methods should do nothing or return false.
我试图避免页面上的 js 警告,因为它会中断流程并且浏览器会卡在该页面上,直到单击弹出窗口。
我添加了 Class,如样本所示:
public class JsDialogHandler : IJsDialogHandler
{
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage)
{
return true;
}
public bool OnJSBeforeUnload(IWebBrowser browserControl, IBrowser browser, string message, bool isReload, IJsDialogCallback callback)
{
return true;
}
public void OnResetDialogState(IWebBrowser browserControl, IBrowser browser)
{
}
public void OnDialogClosed(IWebBrowser browserControl, IBrowser browser)
{
}
}
我将 Chromium 浏览器分配为:
CefSharp.Cef.Initialize(new CefSharp.CefSettings());
browser = new CefSharp.WinForms.ChromiumWebBrowser(CustomLinks[0].ToString());
JsDialogHandler jss = new JsDialogHandler();
browser.JsDialogHandler = jss;
事情是当警报应该显示它执行 运行 OnJSDialog
事件时。但随后浏览器变白并卡住并试图找到解决方法但在线可用的内容不多..
有什么建议吗?
在处理程序的 OnJSDialog
方法中,确保在回调中调用 Continue(...)
:
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage) {
callback.Continue(true);
return true;
}
如果您只想禁用 javascript 警报,可以使用参数 suppressMessage
:
// Implementation of IJsDialogHandler
public bool OnJSDialog(IWebBrowser browserControl, IBrowser browser, string originUrl, CefJsDialogType dialogType, string messageText, string defaultPromptText, IJsDialogCallback callback, ref bool suppressMessage)
{
suppressMessage = true;
return false;
}
// All other methods should do nothing or return false.