网上查询出很多方法,归结起来有两种
1、使用IPersistStreamInit接口实现,函数名都是function GetHtml(const WebBrowser:TWebBrowser) : string;这个函数确实可以得到全部的html源码,但是里面用到了hHTMLText :=GlobalAlloc(GPTR, BufSize); 而没有调用GlobalFree释放hHTMLText,加上GlobalFree(hHTMLText),但是程序会出错,怪不得没有人加释放的函数。
2、Memo1.Lines.Add(IHtmlDocument2(WebBrowser1.Document).Body.OuterText);这中方法只能得到<head>后面的源码,<head>源码得不到。
以上两种方法都有缺陷,后来从国外的网站上找到了很简单的方法来取得WebBrowser全部html源码的方法,如下
- uses mshtml;
- var
- iall : IHTMLElement;
- begin
- if Assigned(WebBrowser1.Document) then
- begin
- iall := (WebBrowser1.Document AS IHTMLDocument2).body;
- while iall.parentElement <> nil do
- begin
- iall := iall.parentElement;
- end;
- memo1.Text := iall.outerHTML;
- end;
- end;
简单吧,其实和上面的第二种方法相似,只不过是先回退到根节点再取outerHTML.