2013-03-15 72 views
5

我正在使用tidhttp控件来加速Twebbrowser中的网页加载。导航到网址很慢,这就是为什么我不使用它(WebBrowser1.Navigate('some_url_here'))。这是我如何做到这一点:与Twebbrowser一起使用Tidhttp

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; 

我用idHTTP获得HTML内容转换成字符串,然后直接写入该字符串的Webbrowser。我有一个本地网络服务器设置(XAMPP)。我遇到的问题是,在将html内容写入浏览器并单击显示的链接之后,它不会显示任何地方,即它显示顶部带有“twopage.html”的大部分空白页面。当我右键单击和“查看源代码”时,我得到了"<html>twopage.html</html>",这很奇怪,而不是页面的实际html。

的 “myhome.html” 文件包含

<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

您的网络浏览器没有“基本网址”,无法正常构建相对链接,这与您通常在浏览http:// somewhere时执行的操作相同。我不知道你是否可以告诉它“base url”是什么,但你肯定可以改变你的“myhome.html”文件以包含绝对链接,例如'”,我敢打赌你会在你的设置中工作。另一方面,我真的不明白这是如何改善以显着方式加载页面的时间,而且我不确定它是否适用于涉及相关资源的复杂页面,如css,图像等 – jachguate 2013-03-15 20:33:19

+0

我同意@jachguate,['也许它甚至不可能](http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/b98fd2b3-72d5-4aab-83d3-40feb01bacef)没有至少一次真正的导航到所需的位置。 – TLama 2013-03-15 20:41:01

+0

我正在改变绝对的链接。这并不能解决问题,只能解决问题。这会做现在。谢谢。 – megatr0n 2013-03-15 21:15:28

回答

7

你需要加载到Web浏览器之前插入一个<base>代码插入HTML,所以它有一个在解析相关网址时可用的基本网址。

+0

这很好。雷米,我也想讨论一个你“停播”的问题。 – megatr0n 2013-03-18 09:33:51