编辑 将其缩小到此1行,
(注:本段内容已经是中文,无需翻译)HTML := wb.OleObject.Document.documentElement.innerHTML;
这段代码会在我的应用程序尝试访问页面的HTML时挂起1-2秒钟(Delphi XE)。如何加快速度?
function Button1Click(Sender : TObject);
begin
wb.navigate('http://10.0.0.154/stats');
// Use a timer to poll the page - dont wait and process app messages
timer1.enabled := true;
end;
procedure Timer1Timer(Sender : TObject);
var
HTML : WideString;
begin
If GetHTML(HTML) = true then
begin
Timer1.enabled := false;
{ do something }
end;
end;
function GetHTML(var HTML : WideString) : boolean;
var
Document : IHTMLDocument2;
begin
HTML := '';
Result := false;
Document := wb.DOcument as IHTMLDocument2;
If Assigned(Document) then
begin
try
HTML := wb.OleObject.Document.documentElement.innerHTML;
Result := true;
except
Result := false;
end;
end;
end;
然而,我注意到我的GetHTML方法需要1-2秒才能返回结果,并且会锁定UI。通过Delphi XE的AQTime查看,该方法调用速度较慢(1-2秒)。这是不稳定的,我想知道它是否在页面仍处于中间加载状态时失败了。
我加载的页面是一个内部页面,充满了JavaScript并且大小为500k,我无法使用OnDocumentComplete,因为它会在页面准备好之前触发,即使我对ReadyState进行检查,它仍然会过早地触发。
有人能够提供一些帮助吗?是否有更快的方法可以访问TWebbrowser的HTML?
outerHtml
而不是innerHtml
了吗?也许会有所不同。另外,如果你正在托管TWebBrowser控件,使用FEATURE_BROWSER_EMULATION来强制TWebBrowser使用最新版本进行显示(截至本文撰写时为9;托管控件的默认模式为7)可能会有所帮助。也许这样做会有速度优势,但我没有测试过。 - Heinrich Ulbricht