Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

100% узнать что окно TWebBrowser загрузилось


Страницы:   1 2

WebSqlNeederr ©   (2007-12-02 18:07:00) 

Как 100% узнать что ВСЕ в окне ТВебБровзер загружено? В том числе и ифреймы, которые могут быть внутри страницы.

Раньше я делал вот так в обработчике события OnDownloadComplete

var one:bool;
begin
one:=false;
if one=true then ВСЕ ЗАГРУЖЕНО
ELSE
one:=true;
end;

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

Может кто то подскажет как верно? Кто то сталкивался с аналогичным вопросом?


sniknik   (2007-12-20 14:45:00) [1]

> Да не над этим они смеялись. Наверно над этим
> if one=true then
> Дельфийцы всегда над этим смеются.
особенно когда прямо перед сравнением стоит
one:=false;
живот от смеха надорвешь...


homm   (2007-12-20 14:40:00) [2]

> [30] WebSqlNeederr   (20.12.07 14:32)

Меня не за что, просто научись пользоваться справкой. Еще обрати внимание на [28]. Мне кажется в NavigateComplete2 нужно убрать проверку и присваивать в любом случае.


WebSqlNeederr   (2007-12-20 14:32:00) [3]

homm, БЛАГОДАРЮ! В общем риспект тебе.

И вообще всем большое СПАСИБО что уделили внимание моей проблеме. Тему можно закрывать.


palva   (2007-12-20 14:31:00) [4]

Да не над этим они смеялись. Наверно над этим
if one=true then
Дельфийцы всегда над этим смеются.


homm   (2007-12-20 14:26:00) [5]

Только по моему там баг. Если во время зегрузки страницы нажать отмену, WebBrowser1NavigateComplete2 выстрелит, а WebBrowser1DocumentComplete нет, и следующий WebBrowser1NavigateComplete2 не пройдет проверку, CurDispatch будет указывать на так и не загруженный документ, и Beep; соответствеено тоже никогда не наступить.


WebSqlNeederr   (2007-12-20 14:24:00) [6]

>>firesDocumentComplete := 0; // только не внктрення переменная метода, как var one:bool; в твоём случае :)

Ха, так вот почему вы смеялись в начальных постах. Вы просто не поняли ну и я опечатку допустил. РАЗУМЕЕТСЯ я не внутри метода делал var one:bool; Это ГЛОБАЛЬНАЯ переменная!!


homm   (2007-12-20 14:22:00) [7]

Ах, нет похоже.
The event can occur before the document is fully downloaded, but when it occurs at least part of the document must be received and a viewer for the document created.

Но в справке я нашел вот это:
var

 CurDispatch: IDispatch; {save the interface globally }

procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);

begin
 if CurDispatch = nil then
   CurDispatch := pDisp; { save for comparison }
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject; const pDisp: IDispatch; var URL: OleVariant);
begin
 if (pDisp = CurDispatch) then
 begin
   Beep; {the document is loaded, not just a frame }
   CurDispatch := nil; {clear the global variable }
 end;
end;


WebSqlNeederr   (2007-12-20 14:10:00) [8]

Ты это имел ввиду? NavigateComplete2?

то есть просто по этому событию оно оповещает что ВСЯ страница загружена?


WebSqlNeederr   (2007-12-20 14:07:00) [9]

>>А по теме есть еще такой способ:
if WebBrowser1.Busy значит еще загружается.
<<

Да, НО только он ничем конкретно не поможет. Я в обработчик кинул:

if NOT wb1.Busy then begin
   showmessage('Zagruzheno !!!');
 end;

Но при загрузке окна вылетает два модальных окна с текстом 'Zagruzheno !!!'


homm   (2007-12-20 12:24:00) [10]

Сделаю вид, что не вижу, как все далют вид, что не видят сказаный мной верный ответ :)


palva   (2007-12-20 12:09:00) [11]

Срабатывание OnDownloadComplete вовсе не означает, что страница загружена. Это всего лишь означает, что загрузка страницы завершена. Если у вас это событие появляется несколько раз, значит загруженная страница снова начала грузиться - мало ли что в ней понаписано, переадресация какая-нибудь.

А по теме есть еще такой способ:
if WebBrowser1.Busy значит еще загружается.


ЮЮ   (2007-12-20 11:13:00) [12]

> [20] homm ©   (20.12.07 10:53)
> Взглянуть вверх и удивиться…


Взглянул, потолок - на месте. Однако, не удивился :(


homm   (2007-12-20 10:53:00) [13]

> [18] WebSQLNeederr   (20.12.07 09:40)
> НО какой есть способ 100% узнать что страница загружена?
> Ведь заранее я не могу знать сколько внутри страницы может
> быть ифреймов ...

Взглянуть вверх и удивиться…


ЮЮ   (2007-12-20 10:35:00) [14]

> Ведь заранее я не могу знать сколько внутри страницы может
> быть ифреймов


А сколько уже загружено (есть на странице) можешь узнать? Если да то алгоритм приерно такой:

firesDocumentComplete := 0; // только не внктрення переменная метода, как var one:bool; в твоём случае :)

в обработчике OnDocumentComplete:

inc(firesDocumentComplete);
if firesDocumentComplete <= <количество фрэймов> then Exit;

 //Web browser fires the event one final time.
 ...


WebSQLNeederr   (2007-12-20 09:40:00) [15]

Desdechado, ну это я и так эмпирическим путем как я уже говорил установил. НО какой есть способ 100% узнать что страница загружена? Ведь заранее я не могу знать сколько внутри страницы может быть ифреймов ...


Desdechado   (2007-12-05 21:00:00) [16]

Write an On DocumentComplete event handler to take specific action when a frame or document is fully loaded into the Web browser .For a document without frames, this event occurs oncewhen the document finishes loading. On a document containing multiple frames, this event occurs once for each frame. When the multiple-frame document finishes loading, the Web browser fires the event one final time.


homm   (2007-12-05 20:38:00) [17]

NavigateComplete2 не то?


WebSQLNeederr   (2007-12-05 20:18:00) [18]

Господа, попрошу без эмоций.

Почему нравоучение маломальски в чем то разбирающихся делфешников экспонентциально стремится к бесконечности? Вы заметили, что кроме флуда вы "великие спецы" дельного ответа так и не дали.

А вопрос то элементарный: каким образом можно удостовериться, что ВЕСЬ документ загружен? Простой обработчик события OnDownloadComplete не гарантирует, что скажем если туда кинуть showmessage('Загружено'); то сообщение вылетит именно когда ВЕСЬ документ загружен. Дело в том, что я лично опытным путем проверял, что во время загрузки документа этот обработчик запускается минимум два раза. Я сделал несколько эмпирических наблюдений и пришел к выводу (как мне кажется сейчас ошибочному), но обработчик запускается ровно два раза и уже после второго запуска можно с какой то уверенностью говорить, что ВЕСЬ документ загружен. И я вас уверяю, такая модель достаточно хорошо работает с приемлимой долей погрешности.

Однако, как я уже говорил, в одной ситуации вылетает глюк, что в моем случае даже после второго срабатывания обработчика я визуально вижу что еще НЕ ВСЯ страница загружена.

Следовательно я у вас прошу совета - кто сталкивался с аналогичным вопросом. Не посчитайте за трудность помочь бедному "ламеру" разобраться. Только попрошу без нравоучений. Я понимаю, что среди некоторых грамотеев Делфи есть подростки или даже чуть старше и они любят самоутвердиться показав якобы дельту в умственных способностях его и опонента. Я попрошу таких людей найти другое место удовлетворения своих комплексов. Если сказать нечего то очень прошу проигнорируйте ответ.

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

Зараннее благодарен за ваши отзывы.


sniknik   (2007-12-05 11:01:00) [19]

> Вот какую пользу даст в данном случае когд присвоения кэпшенов? Никакую.
да ну? мы же условились, что автор не знает в чем/где ошибка. почему ты думаешь, что вырезая присвоения он не вырезает и ее? а если вопрос "у меня AV, что делать?", и код с вырезанными присвоениями, только условие (причем тоже в данном случае неправильное), в котором его не может быть в принципе.
к тому же  AV, это уже информация по которой чтото можно судить, обычно ограничиваются безликим "не работает/не пашет/не катит/..."

и что вообще тогда можно посоветовать?

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


clickmaker   (2007-12-05 10:41:00) [20]

OnDocumentComplete


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо