Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

TWebBrowser   Найти похожие ветки 

 
Кабан ©   (2007-02-22 11:04) [0]

Пытаюсь загрузить страницу в 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");

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


 
Johnmen ©   (2007-02-22 23:03) [1]

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


 
VeLeS ©   (2007-02-23 01:20) [2]

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

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


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

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

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

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


 
palva ©   (2007-02-26 13:16) [4]

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


 
Кабан ©   (2007-02-26 13:40) [5]

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


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

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

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-27 10:06) [7]

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


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

Ну так проблема совсем в другом была. Изначально 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-28 09:50) [9]

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

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


 
Arm79 ©   (2007-02-28 12:31) [10]

Использую эту процедуру для получения текста из 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;


 
DiamondShark ©   (2007-02-28 12:57) [11]


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

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


 
Кабан ©   (2007-02-28 13:18) [12]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
15-1174646776
pasha_golub
2007-03-23 13:46
2007.04.22
Уголок гурмана


2-1175260650
Greenchel
2007-03-30 17:17
2007.04.22
http, ftp и т.д.


2-1175519849
Solo
2007-04-02 17:17
2007.04.22
There is no overloaded version of FindNode that can be called w


15-1174690671
eXPell
2007-03-24 01:57
2007.04.22
Ну, разве что для интереса)))


6-1161869306
Axis_of_Evil
2006-10-26 17:28
2007.04.22
TWSocket. как получить уведомление о невозможности соединения?