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