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