Używam kontrolki tidhttp, aby przyspieszyć ładowanie strony w Twebbrowser. Nawigowanie do adresu URL jest powolne, dlatego nie używam go (WebBrowser1.Navigate('some_url_here')
). Oto jak to zrobić:Używanie Tidhttp z Twebbrowser
procedure TForm1.Button2Click(Sender: TObject);
procedure LoadHtmlIntoBrowser(var WB: TweBbrowser; const HTMLString: string);
var
v: OleVariant;
HTMLDocument: IHTMLDocument2;
begin
WB.Navigate('about:blank');
while WB.ReadyState < READYSTATE_INTERACTIVE do
forms.Application.ProcessMessages;
if Assigned(WB.Document) then
begin
HTMLDocument := WB.Document as IHTMLDocument2;
v := VarArrayCreate([0, 0], varVariant);
v[0] := HTMLString;
HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
HTMLDocument.Close;
end;
forms.Application.ProcessMessages;
end;
var
str:string;
begin
str:=idhttp1.Get('http://localhost/myhome.html');
LoadHtmlIntoBrowser(WebBrowser1,str);
end;
używam idHTTP
aby uzyskać zawartość HTML do ciąg następnie napisać ten ciąg bezpośrednio do Webbrowser. Mam lokalną konfigurację serwera WWW (XAMPP). Problem polega na tym, że po tym, jak treść HTML została zapisana w przeglądarce i kliknę link, który się wyświetli, nie ma tam miejsca, tzn. Pokazuje przede wszystkim pustą stronę z "twopage.html" na górze. Kiedy kliknę prawym przyciskiem i "wyświetl źródło", otrzymuję "<html>twopage.html</html>"
, co jest dziwne, a nie rzeczywisty html strony.
W "myhome.html" plik zawiera
<html>
<head></head>
<body><h1>My home</h1><a href="twopage.html"></a></body>
</html>
The other webpage, "twopage.html" contains
<html>
<head></head>
<body><h1>Another Webpage</h1></body>
</html>
Twoja przeglądarka nie ma "podstawowego adresu URL", aby poprawnie zbudować relatywne linki w taki sposób, w jaki zwykle się odbywa, kiedy naprawdę nawigujesz do 'http: // gdzieś '. Nie wiem, czy potrafisz _informować, co to jest "bazowy URL", ale na pewno możesz zmienić plik "myhome.html" tak, by zawierał bezwzględne linki, na przykład '", które założę się będzie działało w twojej konfiguracji. Z drugiej strony, naprawdę nie widzę, jak to może poprawić czas ładowania strony w znaczący sposób, i nie jestem pewien, czy działa z złożoną stroną z powiązanymi zasobami, takimi jak css, obrazy i takie – jachguate
Zgadzam się z @ungalguate, ["może to nawet nie jest możliwe"] (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b98fd2b3-72d5-4aab-83d3-40feb01bacef) bez przynajmniej jedna prawdziwa nawigacja do wybranej lokalizacji. – TLama
Zmieniam linki do wartości bezwzględnych. To nie rozwiązuje problemu, ale działa tylko wokół niego. To zrobi na razie. Dzięki. – megatr0n