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>
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
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
Sto cambiando i collegamenti in assoluto. Questo non risolve il problema ma funziona solo intorno ad esso. Questo lo farà per ora. Grazie. – megatr0n