Наш канал в telegram канал codeby

Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде !  Подробнее ...

Control WebBrowser. Часть 2: События

В предыдущей статье было продемонстрировано, как получить данные в виде html страницы и вывести их в окно элемента управления webBrowser. Сегодня более подробно рассмотрим, что происходит после нажатия кнопки btnSend на форме (клавиши Enter на клавиатуре).

Три основных события контрола webBrowser

После нажатия кнопки btnSend (Enter) мы попадаем в обработчик события Click (KeyDown), в котором происходит запуск метода Navigate. Первое, что должен выполнить данный метод, это осуществить переход, по указанному нами адресу в поле url. Но перед тем, как будет выполнен переход, в элементе управления webBrowser возникает первое событие.

Navigating

Данное событие возникает перед тем, как будет выполнен переход. В обработчике данного события можно отследить, куда будет осуществлён переход, для этого можно использовать следующую запись — e.Url, осуществить проверку на правильность введенного адреса или его отсутствие, а так же и во все отменить переход по указанному адресу.

Navigating

Забегая немного вперед, хочется рассказать о двух полезных свойствах данного элемента управления.

IsBusy

Первое свойство позволяет определить происходит ли в данный момент загрузка новых данных в webBrowser. Данное свойство принимает значение true, в момент загрузки новых данных, всё остальное время, данное свойство имеет значение false.

ReadyState

Свойство ReadyState пригодиться, если нужно отследить текущее состояние элемента управления WebBrowser.

В отличие от предыдущего свойства имеет несколько значений, начальным из которых является значение Uninitialized, которое обозначает, что control webBrowser, в данный момент, не содержит никаких данных.

На примере созданного в предыдущей статье сайта test.local, проследим за состоянием обоих свойств от момента нажатия на кнопку Enter, до полной загрузки данных в control webBrowser.

Текущее значение свойств:

Navigated

Если в событие Navigating был дан положительный ответ на запрос о переходе, то метод Navigate выполняет переход по указанному нами адресу, после чего начинается загрузка данных в control webBrowser, именно в этот момент возникает второе событие Navigated, которое оповещает о начале загрузки данных в элемент управления WebBrowser.

Текущее значение свойств:

пример:


Чат codeby в telegram перезагрузка

Обсуждаем вопросы информационной безопасности, методы защиты информации, программирование. Задавайте свои вопросы и комментируйте чужие.  Подробнее ...

DocumentCompleted

После события Navigated происходит событие DocumentCompleted, которое обозначает, что загрузка данных в control webBrowser была выполнена полностью. Именно после возникновения этого события можно переходить к работе с полученными данными, например парсить контент, сохранять данные и так далее.

Текущее значение свойств:

пример

Фреймы

Данное событие может возникать несколько раз, например: если страница содержит фреймы, то тогда после каждого загруженного фрейма, будет происходить событие DocumentCompleted, поэтому в обработчике этого события, возможно, потребуется сделать пару дополнительных проверок.

Например: запрашиваемая страница содержит два фрейма

Исходник страницы

6

Если не делать никаких проверок, то при возникновении события DocumentCompleted в первый раз мы получаем не полную загрузку страницы, а полную загрузку первого фрейма, а так как их два, то тогда получим два вызова события DocumentCompleted для обоих фреймов. Чтобы этого избежать, можно использовать простую проверку:

При работе с фреймами, так же стоит внимательно отслеживать значение свойства isBusy, так как после первого загруженного фрейма, значение измениться на false, при этом загрузка новых данных продолжается. В таком случае лучше отслеживать свойства ReadyState, которое сначала изменит свое значение на Interactive, которое означает, что какая-та часть данных уже была загружена в элемент управления webBrowser, а затем на Complete. При этом так же потребуется выполнить код проверки на загрузку всего документа, а не отдельного фрейма.

Для Ajax запросов можно использовать вот такую проверку, опять же в событие DocumentCompleted

Так же стоит помнить, что если в поле url указан не верный адрес или он вообще не указан, то после нажатия кнопки Enter (btnSend) все 3 события будут успешно отработаны, как и при указании верного адреса.

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

Читайте также:


Codeby.net совместно с PHDays 8

Объявляют о проведении грандиозного конкурса с умопомрачительными призами ! Получи бесплатно билет на PHDays 8, деньги, футболку с символикой codeby, а так же всеобщий респект и уважение. Подробнее ...

Похожие темы

Как сделать сниппет для c# Как сделать сниппет (snippet) Готовые сниппеты программы Visual Studio позволяют уменьшить время при написании кода, но как сделать сниппет самому? О...
Web Application Pentesting | Атаки на HTTP Basic A... Привет колеги. Добро пожаловать на курс Web Application Pentesting. В этой статье мы с вами поговорим о: Вспомним немного заголовки ответа серв...
Как создать и добавить колонку в элементе DataGrid... Создание и добавление колонки в DataGridView В этой статье показано, как программно создать и добавить колонку в DataGridView. Создадим новое прил...
HTTP Digest Аутентитфикация | Web Application Pent... Привет колеги. Добро пожаловать на курс Web Application Pentesting. В этой статье мы с вами поговорим о: Дайджест(Цифровой) Аутентификации. Попыт...
основные компоненты .NET Framework (CLR и Framewor... Основные компоненты .NET Framework (CLR и Framework Class Library) В первой статье Вы узнали, что платформа .NET Framework состоит из 2 основных компо...