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

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

Ошибка с TWebBrowser


dmitry kholl ©   (2006-09-22 16:14:00) 

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

Для загрузки данных использую режим About.
Вот как я загружаю и выгружаю данные.

procedure OpenBrowser(ABrowser: TWebBrowser);
begin
 if not Assigned(ABrowser) then Exit;

 ABrowser.Navigate('about:blank');
end;

procedure LoadBrowser(ABrowser: TWebBrowser; const AHTML: String = '');
var
 Document: IHTMLDocument2;
 V: OleVariant;
begin
 if not Assigned(ABrowser) then Exit;

 Document := ABrowser.Document as IHtmlDocument2;
 V := VarArrayCreate([0, 0], varVariant);

 V[0] := AHTML;

 Document.Write(PSafeArray(TVarData(v).VArray));
 Document.Close;

end;

procedure CloseBrowser(ABrowser: TWebBrowser);
begin
 if not Assigned(ABrowser) then Exit;

 ABrowser.Navigate('');
end;


Сначала вызываю OpenBrowser, потом загружаю LoadBrowser и
при закрытии CloseBrowser.

И там много раз при переключении закладок данные подгружаются заново.

Но периодически происходит серия жудких AV.

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


dmitry kholl   (2006-09-26 17:10:00) [1]

> Потому что метод Navigate асинхронный.
> Сразу после возврата из Navigate документа может ещё не
> быть. Соответственно, свойство Document возвращает nil.
> Гарантированная точка, в которой существует документ --
> событие OnNavigateComplete2.


Спасибо за обьяснение. Теперь стало понятнее.

А есть ли возможность запретить выделение текста в браузере?


dmitry kholl   (2006-09-26 17:05:00) [2]

Я пока пошел другим путем.
При каждой перегрузке я заново креирую экземпляр класса.
Это "вроде" помогло избавится от AV.

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

Я еще не пробывал переделать это  место
Document := ABrowser.Document as IHtmlDocument2;
V := VarArrayCreate([0, 0], varVariant);

V[0] := AHTML;

Document.Write(PSafeArray(TVarData(v).VArray));
Document.Close;


Как вы загружаете в него данные в режиме about?


Percent   (2006-09-23 15:43:00) [3]

Пробовал?

А то б я предлагал...


DiamondShark   (2006-09-23 12:09:00) [4]


> Percent   (23.09.06 11:42) [6]

Пробовал?


Percent   (2006-09-23 11:42:00) [5]

procedure OpenBrowser(ABrowser: TWebBrowser);
begin
 if not Assigned(ABrowser) then Exit;
 ABrowser.Navigate('about:blank');

  while (ABrowser.Document = nil) do;

end;


DiamondShark   (2006-09-22 22:10:00) [6]


> Но периодически происходит серия жудких AV.

Потому что метод Navigate асинхронный.
Сразу после возврата из Navigate документа может ещё не быть. Соответственно, свойство Document возвращает nil.
Гарантированная точка, в которой существует документ -- событие OnNavigateComplete2.


dmitry kholl   (2006-09-22 18:06:00) [7]

> Если AV будут и дальше, то смотреть 17 строку кода.


Щас уже мне не до юмора :(  это шутка или намек на то что нужно самому освобождать AHTMLкоторый я передаю в браузер?


dmitry kholl   (2006-09-22 18:02:00) [8]

> Взять TEmbeddedWB.

С ним ошибка осталась.

Еще одна связанная наверно с АV проблемма при каждой такой загрузке
растет кол-во используемой памяти.


Орион   (2006-09-22 17:06:00) [9]

Если AV будут и дальше, то смотреть 17 строку кода.

Кстати, а чем жуДкие AV, от не жуДких отличаются?


Орион   (2006-09-22 17:05:00) [10]

> Подскажите как правильно работать с этим браузером.

Взять TEmbeddedWB.


Наверх

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