![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка с 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.