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

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

TWebBrowser


Кабан ©   (2007-02-22 11:04:00) 

Пытаюсь загрузить страницу в WebBrowser следующим образом:
procedure TForm1.LoadData(FileName : String);
var
 MS      : TStringStream;
 HTML    : String;
begin
... // Загружаю файл в строку HTML

MS := TStringStream.Create(HTML);
try
 (Webbrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(MS));
 finally
 MS.Free;
 end
end;

В большинстве случаев файл загружается нормально, но иногда при внесении незначительных изменений в
браузере отображается исходный код страницы. Изменения могут быть совершенно незначительными, например,
иногда достаточно добавить, допустим, в тэг "td" строку align="center".

При этом, при попытке загрузить страницу следующим образом:

WebBrowser.Navigate(Path+'Index.html');

Все отображается нормально.


Кабан   (2007-02-28 13:18:00) [1]

Вставил задержку, не помогает.

2 Arm79 ©   (28.02.07 12:31) [10]
Спасибо, попробовал этот код, работает.


DiamondShark   (2007-02-28 12:57:00) [2]


> Кабан ©   (28.02.07 09:50) [9]
> перед LoadData(FileName : String);
> вызываю WebBrowser.Navigate('about:blank');
>
> Видимо и это мимо...

Navigate -- процедура асинхронная и немгновенная.
Надо дожидаться пока документ действительно загрузится.


Arm79   (2007-02-28 12:31:00) [3]

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

function TfrmMain.GetPlainText(const HTMLStr: string): string;
 var
   sTemp : string;
   Doc   : IHTMLDocument2;
   V     : Variant;
begin
 sTemp   := HTMLStr;

 if wbTransformer.Document = nil
 then begin
   wbTransformer.Navigate('about:blank');
   repeat
     Application.ProcessMessages;
   until wbTransformer.Document <> nil;
 end;

 Doc     := IHTMLDocument2(wbTransformer.Document);
 v       := VarArrayCreate([0, 0], varVariant);
 v[0]    := sTemp;
 Doc.write(PSafeArray(TVarData(v).VArray));
 Doc.close;

 Result := Doc.body.outerText;
end;


Кабан   (2007-02-28 09:50:00) [4]

перед LoadData(FileName : String);
вызываю WebBrowser.Navigate('about:blank');

Видимо и это мимо...


Ш-К   (2007-02-27 17:56:00) [5]

Ну так проблема совсем в другом была. Изначально Webbrowser.Document не был инициализирован.

  Webbrowser.Go('about:blank');
 Webbrowser.Wait;

procedure TEmbeddedWB.Go(Url: string);
var
  _URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
begin
  _URL := Url;
  Flags := 0;
  TargetFrameName := 0;
  Postdata := 0;
  Headers := 0;
  if (Trim(_URL) <> '') then
     Navigate2(_URL, Flags, TargetFrameName, PostData, Headers);
end;

procedure TEmbeddedWB.Wait;
begin
    while ReadyState <> READYSTATE_COMPLETE do
      Forms.Application.ProcessMessages;
end;


Если  создается в памяти и всегда невидимый, проверяется на READYSTATE_INTERACTIVE


Кабан   (2007-02-27 10:06:00) [6]

Падает при старте программы, загружается в первые


Ш-К   (2007-02-26 23:39:00) [7]

Возможно, надо очищать предыдущий документ.

function TEmbeddedWB.InternalLoadDocumentFromStream(const Stream: TStream):
   HRESULT;
var
 PersistStreamInit: IPersistStreamInit;
 StreamAdapter: IStream;
begin
 Result := S_False;
 Assert(Assigned(Document));
 // Get IPersistStreamInit interface on document object
 if Document.QueryInterface(
   IPersistStreamInit, PersistStreamInit
 ) = S_OK then
 begin
   // Clear document
   if PersistStreamInit.InitNew = S_OK then
   begin
     // Get IStream interface on stream
     StreamAdapter:= TStreamAdapter.Create(Stream);
     // Load data from Stream into WebBrowser
    Result := PersistStreamInit.Load(StreamAdapter);
   end;
 end;
end;


Кабан   (2007-02-26 13:40:00) [8]

Не пойдет, любое изменение шаблона браузер отражает корректно, но при НЕКОТОРЫХ, падает.


palva   (2007-02-26 13:16:00) [9]

> ПОЧЕМУ при данном способе загрузки возникают проблемы.
Такая гипотеза:
Потому что работает движок браузера. А он понимает так: раз URL тот же самый, то перезагружать не нужно. Может быть попытаться не Navigate а инициировать Reload?


Кабан   (2007-02-26 10:35:00) [10]

Вы вопрос читали?
>>При этом, при попытке загрузить страницу следующим образом:
>>WebBrowser.Navigate(Path+'Index.html');
>>Все отображается нормально.

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

Вопрос был не в том, КАК загружать файл, а ПОЧЕМУ при данном способе загрузки возникают проблемы.


VeLeS   (2007-02-23 01:20:00) [11]

Можно и по другому

HTMLFileName : String;
HTMLFileName:='бла-бла-бла.html';
WebBrowser.Navigate(WideString(HTMLFileName));


Johnmen   (2007-02-22 23:03:00) [12]

Боже, кругом одни извращенцы...:)
HTMLFileName : OleVariant;
HTMLFileName:='бла-бла-бла.html';
WebBrowser.Navigate2(HTMLFileName);


Наверх

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