2013-03-15 38 views
5

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> 
+3

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

+0

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

+0

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

Odpowiedz

7

Trzeba wstawić <base> tag do HTML przed załadowaniem go do przeglądarki internetowej, tak, że ma bazowy adres URL dostępny podczas rozwiązywania względnych adresów URL.

+0

to działa świetnie. Remy, ja też chcę przedyskutować kwestię "z powietrza". – megatr0n