Как я могу запретить пользователю просматривать определенные веб-сайты в элементе управления WebBrowser?

У меня есть простой веб-браузер, встроенный в приложение, которое позволяет пользователю осуществлять поиск в Википедии, и я пытаюсь запретить пользователю переходить на другие сайты за пределами Википедии (например, путем нажатия на внешнюю ссылку, ссылки). Прямо сейчас я использую этот простой код:

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 событие, чтобы попытаться превентивно остановить пользователяbefore страница загружена, происходит сбой, поскольку элемент управления веб-браузера не обновляетUrl свойство, пока после загрузки страницы.

Причина, по которой мне не нравится этот код, состоит в том, что страница уже загружена при ее вызове, поэтому любые ошибки на этой странице (например, ошибки скрипта, которые отображают всплывающее окно) отображаются, даже если веб-страница этого не делает.

Я читал источники, в которых говорится, что не следует использовать элемент управления WebBrowser по различным причинам, но в этом случае безопасность не является серьезной проблемой. Мне также не нужно беспокоиться о том, что конечный пользователь что-то делает, так как это приложение является внутренним приложением, которое имеет буквально только одного пользователя, и он не сможет обойти защиту.

Отключение всех других страниц в настройках IE также не является решением, поскольку этот пользователь использует IE для другого серфинга, и сайты внутренней сети этой организации также работают на IE (и эти адреса меняются, поэтому просто разрешить всем им будет трудно предвидеть).

Ответы на вопрос(3)

Решение Вопроса

Подписаться наWebBrowser.Navigating событие. ПроверитьWebBrowserNavigatingEventArgs.Url собственность и наборWebBrowserNavigatingEventArgs.Cancel=true если это не Википедия.

 Ricardo Altamirano21 июн. 2012 г., 15:54
Это работает отлично. Спасибо за почти мгновенную помощь.
 Ricardo Altamirano21 июн. 2012 г., 15:59
@HatSoft WebBrowser перемещается на страницу на основе ссылок, которые пользователь нажимает на странице, а не на основе нажатия кнопки или другого события.
 21 июн. 2012 г., 15:53
В любом случае, как вы передаете URL для навигации и отображения в элементе управления Browser. Как вызвать метод WebBrowser.Navigate (URL) при нажатии на кнопку и т. Д.
 21 июн. 2012 г., 15:53
Это для WPF, а не для WinForms.

Я думаю, что это может быть полезно для вас. Использует свойство WebBrowser.Document для поиска ссылок и циклического перемещения по ссылкам и отключения навигации по нужным ссылкам. http://programsolution.blogspot.com/2008/01/how-disable-link-navigation-in.html

 Ricardo Altamirano21 июн. 2012 г., 16:20
Поверьте мне, не только для моего удовольствия никто не должен рекомендовать анализ HTML с помощью регулярных выражений. Это для большего блага.
 Ricardo Altamirano21 июн. 2012 г., 15:55
Для вашей первой ссылки, я просто должен направить вас кthe most voted question on SO, Разбор HTML с помощью Regex - ужасная идея, простая и понятная.
 21 июн. 2012 г., 16:19
Отредактировано для вашего удовольствия.

Ваш ответ на вопрос