【发布时间】:2012-06-21 13:38:23
【问题描述】:
我在应用程序中嵌入了一个简单的网络浏览器,允许用户搜索维基百科,我试图阻止用户浏览维基百科之外的其他网站(例如,通过单击引用的外部链接)。现在,我正在使用这个简单的代码:
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 上运行(并且这些地址会更改,所以简单地允许所有这些页面会难以预料)。
【问题讨论】:
标签: c# winforms webbrowser-control