2013-03-15 19 views
5

Sto usando il controllo tidhttp per accelerare il caricamento di una pagina Web in un Twebbrowser. Navigare verso l'url è lento, ecco perché non lo uso (WebBrowser1.Navigate('some_url_here')). Ecco come lo faccio:Utilizzo di Tidhttp con 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; 

Io uso il idHTTP per ottenere il contenuto HTML in una stringa quindi scrivere quella stringa direttamente al browser web. Ho una configurazione del server web locale (XAMPP). Il problema che ho è che dopo che il contenuto HTML è stato scritto nel browser e faccio clic su un collegamento che viene visualizzato, non va dove mostra una pagina in gran parte vuota con "twopage.html" nella parte superiore. Quando faccio clic destro e "visualizza origine" ottengo "<html>twopage.html</html>" che è strano e non l'html effettivo della pagina.

Il file "myhome.html" contiene

<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

Il tuo browser web non ha "URL base" per costruire correttamente i collegamenti relativi nel modo in cui normalmente si fa quando si naviga in 'http: // somewhere'. Non so se puoi _informare ciò che è "l'url di base", ma puoi sicuramente cambiare il tuo file "myhome.html" per includere i link assoluti, ad esempio "", che scommetto funzionerà nella tua configurazione. D'altra parte, davvero non vedo come questo possa migliorare il tempo di caricare la pagina in modo significativo, e non sono sicuro che funzioni con una pagina complessa che coinvolge risorse correlate, come css, immagini e simili – jachguate

+0

Sono d'accordo con @jachguate, ['forse non è nemmeno possibile '] (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b98fd2b3-72d5-4aab-83d3-40feb01bacef) senza almeno una vera navigazione nella posizione desiderata. – TLama

+0

Sto cambiando i collegamenti in assoluto. Questo non risolve il problema ma funziona solo intorno ad esso. Questo lo farà per ora. Grazie. – megatr0n

risposta

7

è necessario inserire un tag nel codice HTML <base> prima di caricarla nel browser web, in modo che abbia un URL di base disponibile quando si risolvono gli url relativi.

+0

funziona alla grande. Remy, voglio anche discutere un problema che "non sei in linea". – megatr0n