【问题标题】:How can I prevent a user from browsing to certain web sites in a WebBrowser control?如何防止用户在 Web 浏览器控件中浏览某些网站?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 这非常有效。感谢您提供近乎即时的帮助。
    【解决方案2】:

    【讨论】:

    • 那是 WPF 的,不是 WinForms 的。
    • 无论如何,您如何传递 URL 以在浏览器控件中导航和显示。点击按钮时调用 WebBrowser.Navigate(URL) 方法等
    • @HatSoft WebBrowser 根据用户在页面中单击的链接导航到页面,而不是基于按钮单击或其他事件。
    【解决方案3】:

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

    【讨论】:

    • 对于您的第一个链接,我必须将您定向到the most voted question on SO。用 Regex 解析 HTML 是一个糟糕的主意,简单明了。
    • 相信我,没有人会推荐使用正则表达式解析 HTML,这不仅仅是为了我的荣幸。这是为了更大的利益。
    猜你喜欢
    • 2020-05-09
    • 2013-06-28
    • 1970-01-01
    • 2015-02-04
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多