Вопрос по winforms, webbrowser-control, c# – Как я могу запретить пользователю просматривать определенные веб-сайты в элементе управления WebBrowser?

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

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

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

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

Ваш Ответ

3   ответа
10

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

Это работает отлично. Спасибо за почти мгновенную помощь. Ricardo Altamirano
0
@HatSoft WebBrowser перемещается на страницу на основе ссылок, которые пользователь нажимает на странице, а не на основе нажатия кнопки или другого события. Ricardo Altamirano
В любом случае, как вы передаете URL для навигации и отображения в элементе управления Browser. Как вызвать метод WebBrowser.Navigate (URL) при нажатии на кнопку и т. Д.
Это для WPF, а не для WinForms.
-1

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

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

Похожие вопросы