Обнаружьте WebBrowser полная загрузка страницы

Как я могу обнаружить когда Система. Windows. Формы. Управление WebBrowser завершило загрузку?

Я пытался использовать события Navigate и DocumentCompleted, но они оба были повышены несколько раз во время загрузки документа!

56
задан Lu55 10 March 2016 в 21:23
поделиться

5 ответов

Я думаю, что событие DocumentCompleted будет запущено для всех загружаемых дочерних документов (например, JS и CSS). Вы можете посмотреть на WebBrowserDocumentCompletedEventArgs в DocumentCompleted , проверить свойство Url и сравнить его с URL-адресом главной страницы.

35
ответ дан 26 November 2019 в 17:21
поделиться

Я сделал следующее:

void BrowserDocumentCompleted(object sender,
        WebBrowserDocumentCompletedEventArgs e)
{
  if (e.Url.AbsolutePath != (sender as WebBrowser).Url.AbsolutePath)
    return; 

  //The page is finished loading 
}

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

From here.

29
ответ дан 26 November 2019 в 17:21
поделиться

Если вы используете WPF, возникает событие LoadCompleted .

Если это Windows.Forms , событие DocumentCompleted должно быть правильным. Если на загружаемой странице есть фреймы, ваш элемент управления WebBrowser будет запускать событие DocumentCompleted для каждого кадра (подробнее см. здесь ). Я бы посоветовал проверять свойство IsBusy каждый раз, когда событие запускается, и если оно ложно, то ваша страница полностью загружена.

3
ответ дан 26 November 2019 в 17:21
поделиться

Похоже, что он не запускает события DocumentCompleted/Navigated для внешних файлов Javascript или CSS, но запускает для iframe. Как говорит PK, сравните свойство WebBrowserDocumentCompletedEventArgs.Url (у меня пока нет кармы, чтобы сделать комментарий).

3
ответ дан 26 November 2019 в 17:21
поделиться

Обратите внимание, что URL-адрес в DocumentCompleted может отличаться от URL-адреса перехода из-за переноса сервера или нормализации URL-адреса (например, вы переходите на www.microsoft.com и получаете http://www.microsoft.com в documentcomplete )

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

В собственном коде вы должны сравнить отправителя события DocumentComplete, чтобы определить, является ли событие последним событием в навигации или нет . Однако в Windows Forms параметр отправителя не заключен в оболочку WebBrowserDocumentCompletedEventArgs. Вы можете либо обработать собственное событие , чтобы получить значение параметра, либо проверить свойство readystate браузера или фрейм документов в обработчике событий DocumentCompleted, чтобы узнать, не все кадры в состоянии готовности.

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

13
ответ дан 26 November 2019 в 17:21
поделиться
Другие вопросы по тегам:

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