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

我在应用程序中嵌入了一个简单的Web浏览器,允许用户搜索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; } 

此代码有效,但页面在运行时已加载。 如果我将此代码放入_Navigating事件以尝试加载页面之前抢先停止用户,则会失败,因为Web浏览器控件在加载页面之前不会更新Url属性。

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

由于各种原因,我已经阅读了不使用WebBrowser控件的消息来源,但在这种情况下,安全性不是主要问题。 我也不需要担心最终用户做某事,因为这个应用程序是一个只有一个用户的内部应用程序,他不会绕过安全性。

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

订阅WebBrowser.Navigating事件。 检查WebBrowserNavigatingEventArgs.Url属性并设置WebBrowserNavigatingEventArgs.Cancel=true如果它不是维基百科。

希望这可能会有所帮助http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigatingcanceleventargs

我认为这可能对你有用。 使用WebBrowser.Document属性查找链接并循环链接并禁用所需链接上的导航。 http://programsolution.blogspot.com/2008/01/how-disable-link-navigation-in.html