C# 如何防止用户浏览WebBrowser控件中的某些网站?

C# 如何防止用户浏览WebBrowser控件中的某些网站?,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我在一个应用程序中嵌入了一个简单的web浏览器,允许用户搜索Wikipedia,我试图阻止用户浏览Wikipedia以外的其他网站(例如,通过单击引用的外部链接)。现在,我正在使用以下简单代码: this.textBoxAddress.Text = this.webBrowser.Url.ToString(); if (this.webBrowser.Url.Host != "en.wikipedia.org") { this.webBrowser.Visible = false;

我在一个应用程序中嵌入了一个简单的web浏览器,允许用户搜索Wikipedia,我试图阻止用户浏览Wikipedia以外的其他网站(例如,通过单击引用的外部链接)。现在,我正在使用以下简单代码:

this.textBoxAddress.Text = this.webBrowser.Url.ToString();
if (this.webBrowser.Url.Host != "en.wikipedia.org")
{
    this.webBrowser.Visible = false;
    this.labelErrorMessage.Visible = true;
}
else
{
    this.webBrowser.Visible = true;
    this.labelErrorMessage.Visible = false;
}
此代码可以工作,但页面在运行时已加载。如果我将此代码放入
\u Navigating
事件中,以尝试在加载页面之前先发制人地停止用户,则会失败,因为web浏览器控件在加载页面之前不会更新
Url
属性

我不喜欢这段代码的原因是,调用页面时页面已经加载,因此页面中的任何错误(例如,脚本错误,显示弹出窗口)都会显示,即使网页没有

我读过一些资料说,出于各种原因,不要使用WebBrowser控件,但在这种情况下,安全性不是一个主要问题。我也不需要担心最终用户在做什么,因为这个应用程序是一个内部应用程序,实际上只有一个用户,他不会绕过安全机制


禁用IE设置中的所有其他页面也不是一个解决方案,因为该用户使用IE进行其他冲浪,并且该组织的内部网站也在IE上运行(这些地址会发生变化,因此简单地允许所有这些地址是很难预料的)。

订阅
WebBrowser.Navigating
活动。检查
WebBrowserNavigatingEventArgs.Url
属性,如果不是wikipedia,则设置
WebBrowserNavigatingEventArgs.Cancel=true

希望这可能会有所帮助。

我认为这可能对您有用。使用WebBrowser.Document属性查找链接,循环浏览链接,并禁用所需链接上的导航。

这是针对WPF的,而不是WinForms。无论如何,您如何传递URL以在浏览器控件中导航和显示。单击一个按钮,你会将WebBrowser.Navigate(URL)方法称为什么etc@HatSoftWebBrowser根据用户在页面中单击的链接导航到页面,而不是基于按钮单击或其他事件。这非常有效。感谢您的即时帮助。对于您的第一个链接,我只需指示您。用正则表达式解析HTML是一个糟糕的想法,简单明了。相信我,没有人会推荐用正则表达式解析HTML,这不仅仅是为了我的快乐。这是为了更大的利益。