FoxBase!
msgbartop
Блог Oracle разработчика
msgbarbottom
foxbase

14.05.2011 Как узнать о завершении загрузки страницы в TWebBrowser

завершение загрузки TWebBrowser
Простой вопрос вынесен в заголовок этой статьи, однако этот вопрос, знаете ли, может поставить в тупик. Ответов на этот вопрос может быть несколько, и все они будут отвечать на него только частично. Некоторые приемы при работе с TWebBrowser будут приведены ниже.
Стандартным образом узнать об окончании загрузки в TWebBrowser невозможно. Да, для этого в TWebBrowser в принципе предназначен метод OnDocumentComplete, который должен срабатывать в тот момент, когда произойдет загрузка страницы, однако срабатывает он далеко не всегда. Главная проблема состоит в том, что иногда этот метод может совсем не сработать. В итоге вы можете никогда не дождаться окончания загрузки документа в TWebBrowser, что очень печально. Для некоторых сайтов OnDocumentComplete вообще никогда  не срабатывает. Почему - непонятно.  
В своей практике я использую комбинированный способ. Суть этого способа состоит в создании булевой переменной, например, Loaded. Эта переменная перед выполнением любого метода, приводящего к навигации на заданную страницу должна выставляться в false. Затем выполняется навигация, и следующий оператор ждет до тех пор, пока эта переменная не примет значение true, выполняя Application.ProcessMessages. Выставить true для Loaded должен метод OnDocumentComplete. Но так как этот метод срабатывает не всегда, то создаем таймер, который запускаем перед выполнением навигации. Устанавливаем ему требуемый интервал, например, 10 секунд, и в методе onTimer также выставляем значение переменной Loaded в true
В итоге наше приложение никогда не зависнет, и это главное. Да, при таком подходе не всегда можно дождаться загрузки всех элементов страницы, например, картинок, но это требование как правило не является определяющим. 
Описанный выше алгоритм удобно реализовать в наследнике TWebBrowser наряду с другими дополнительными функциями, расширяющими функциональность TWebBrowser.

www.foxbase.ru



Смотрите также:



Оставьте свой комментарий

Вы должны быть авторизированны, чтобы оставить комментарий.