如何在 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 控件中禁用“安全警报”窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 WPF WebBrowser 控件的点击噪音?

在 WebBrowser 控件中禁用 JavaScript 错误

在 WebBrowser 控件中禁用警报窗口

在WebBrowser控件中禁用脚本?

wpf webBrowser 禁用超链接

WebBrowser禁用触摸缩放