3

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

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事件中以尝试在页面加载之前Url抢先停止用户,它会失败,因为 Web 浏览器控件直到页面加载后才会更新属性。

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

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

禁用 IE 设置中的所有其他页面也不是解决方案,因为该用户使用 IE 进行其他浏览,并且该组织的 Intranet 站点也在 IE 上运行(并且这些地址更改,因此简单地允许所有这些将很难预料)。

4

3 回答 3

10

订阅WebBrowser.Navigating活动。检查WebBrowserNavigatingEventArgs.Url属性并设置WebBrowserNavigatingEventArgs.Cancel=true它是否不是维基百科。

于 2012-06-21T13:47:40.647 回答
0

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

于 2012-06-21T13:51:56.597 回答
-1

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

于 2012-06-21T13:53:08.427 回答