2013-03-15 16 views
5

Ich verwende das Tidhttp-Steuerelement, um das Laden einer Webseite in einem Twebbrowser zu beschleunigen. Das Navigieren zur URL ist langsam, weshalb ich es nicht verwende (WebBrowser1.Navigate('some_url_here')). Hier ist, wie ich es tun:Verwenden von Tidhttp mit 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; 

ich die idHTTP verwenden, um die HTML-Inhalt in einen String erhalten dann diese Zeichenfolge schreiben Sie direkt an Web-Browser. Ich habe ein lokales Webserver-Setup (XAMPP). Das Problem, das ich habe, ist, dass, nachdem der HTML-Inhalt in den Browser geschrieben wurde und ich auf einen angezeigten Link klicke, er nirgendwohin geht, d. H. Er zeigt eine meist leere Seite mit "twopage.html" an der Spitze. Wenn ich rechts klicke und "Quelle anzeigen" bekomme ich "<html>twopage.html</html>" was seltsam ist und nicht das tatsächliche HTML der Seite.

Die "myhome.html" Datei enthält

<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

Ihr Webbrowser hat keine "Basis-URL", um die relativen Links richtig zu erstellen, wie es normalerweise der Fall ist, wenn Sie wirklich zu "http: // irgendwo" navigieren. Ich weiß nicht, ob Sie _inform_ es können, was diese "Basisurl" ist, aber Sie können Ihre "myhome.html" Datei sicher ändern, um absolute Verbindungen einzuschließen, zum Beispiel '', was ich wette, wird in Ihrem Setup funktionieren. Auf der anderen Seite sehe ich wirklich nicht, wie dies die Zeit zum Laden der Seite in signifikanter Weise verbessern kann, und ich bin mir nicht sicher, ob es mit einer komplexen Seite mit verwandten Ressourcen wie CSS, Bildern und dergleichen funktioniert – jachguate

+0

Ich stimme @jachguate zu, [vielleicht ist es nicht einmal möglich] (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b98fd2b3-72d5-4aab-83d3-40feb01bacef) ohne mindestens eine echte Navigation zum gewünschten Ort. – TLama

+0

Ich ändere die Links auf absolut. Dies löst das Problem nicht, sondern funktioniert nur darum herum. Dies wird für jetzt tun. Vielen Dank. – megatr0n

Antwort

7

Sie benötigen einen <base>-Tag in den HTML-Code einzufügen, bevor sie in den Web-Browser geladen wird, so dass es eine hat Basis-URL verfügbar, wenn relative URLs aufgelöst werden.

+0

das funktioniert super. Remy, ich möchte auch ein Thema besprechen, dass du "aus der Luft" bist. – megatr0n