如何在 Webbrowser 控件中禁用“安全警报”窗口
Posted
技术标签:
【中文标题】如何在 Webbrowser 控件中禁用“安全警报”窗口【英文标题】:How to disable "Security Alert" window in Webbrowser control 【发布时间】:2010-09-15 18:25:56 【问题描述】:我正在使用 Webbrowser 控件通过“不受信任的证书”登录到 HTTPS 站点。 但我会弹出关于不受信任证书的标准窗口“安全警报”:
我必须按标题找到这个窗口并将其发送 Alt+Y 以按 Yes:
int iHandle = NativeWin32.FindWindow(null, "Security Alert");
NativeWin32.SetForegroundWindow(iHandle);
System.Windows.Forms.SendKeys.Send("Y%");
但用户可以看到此窗口闪烁。
如何忽略此警报? 还是在 Webbrowser 控件中禁用此“不受信任的证书”检查?
【问题讨论】:
WebBrowser control - ignore SSL errors 的可能重复项 另请参阅:控制台应用程序的 WebBrowser 控件中的 SSL 错误***.com/questions/17698002/… 【参考方案1】:应该这样做:
public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
return true;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
显然,盲目地允许证书是一种安全风险。小心点。
【讨论】:
我无法让它与 WebBrowser 控件一起使用。可能只有我一个人,但我怀疑这个解决方案不适用,因为 System.Windows.Forms.WebBrowser 控件没有通过 .NET 发送请求。 @DanielBallinger 不只是你。我有same problem。 这仅适用于托管对象。 Webbrowser 控件是一个包装的非托管控件。这就是为什么这不起作用。【参考方案2】:如果证书不是来自受信任的证书颁发机构(提示中的第一点),那么您可以在相关 PC 上的受信任的根证书颁发机构下安装证书。
您可以在查看证书下执行此操作。
在某些方面,这可能是一个更简单的解决方案,因为它不需要任何接受任何和所有证书的代码更改。但是,它确实需要在使用应用程序的任何地方安装证书。
【讨论】:
看起来是个好主意,但出于某种原因,我刚刚尝试了it didn't work for me。任何想法为什么?【参考方案3】:当我将 WebBrowser.ScriptErrorsSuppressed 属性设置为 false 时,我不再看到这些弹出窗口
【讨论】:
这将隐藏它。它不会点击YES 你确定吗?我的代码已经运行了几个月没有问题 是的,它只会隐藏它,因此页面将无法在 OP 案例中加载【参考方案4】:I see this solution.it work for me.It very easy way.
【讨论】:
【参考方案5】:在这里,我们采用解决方案: 我在 Browser_Navigated 事件上运行它,因为在此之前底层的 activeX 组件为空。
参考:https://social.msdn.microsoft.com/Forums/vstudio/en-US/4f686de1-8884-4a8d-8ec5-ae4eff8ce6db/new-wpf-webbrowser-how-do-i-suppress-script-errors?forum=wpf
private void Browser_Navigating_1(object sender, NavigatingCancelEventArgs e)
HideScriptErrors(Browser,true);
public void HideScriptErrors(WebBrowser wb, bool Hide)
FieldInfo fiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
if (fiComWebBrowser == null) return;
object objComWebBrowser = fiComWebBrowser.GetValue(wb);
if (objComWebBrowser == null) return;
objComWebBrowser.GetType().InvokeMember(
"Silent", BindingFlags.SetProperty, null, objComWebBrowser, new object[] Hide );
【讨论】:
以上是关于如何在 Webbrowser 控件中禁用“安全警报”窗口的主要内容,如果未能解决你的问题,请参考以下文章