我在允许用户搜索维基百科的应用程序中嵌入了一个简单的网络浏览器,并且我试图阻止用户浏览维基百科以外的其他网站(例如,通过单击引用的外部链接)。现在,我正在使用这个简单的代码:
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 上运行(并且这些地址更改,因此简单地允许所有这些将很难预料)。