편집 는이 1 개 라인을 좁혀 시간을 소비 응용 프로그램 잠금 TWebbrowsers의 HTML을 액세스하는 동안
HTML := wb.OleObject.Document.documentElement.innerHTML;
... 어떻게 속도를 위로 할 수 있는가?
다음 코드를 사용하면 내 응용 프로그램이 페이지의 HTML (Delphi XE)에 액세스하는 동안 1-2 초 동안 응답하지 않을 수 있습니다.
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 초). Sporatic이고 페이지가 아직 중간로드 일 때 실패할지 궁금합니다.
내가로드중인 페이지는 자바 스크립트와 500k로 가득한 사내 페이지입니다. ReadyState가 계속 실행되는 경우에도 페이지가 준비되기 전에 실행되므로 OnDocumentComplete를 사용할 수 없습니다. 일찍.
TWebbrowser의 HTML에 액세스 할 수있는 사람이라면 누구나 쉽게 읽을 수 있습니다.
wb.Navigate은 즉시 반환을,이 응용 프로그램 매달려의 원인이되지 않도록. TWebBrowser는 페이지를 다운로드 한 다음 표시를 위해 렌더링해야합니다. 즉, HTML 가져 오기 지연이 발생합니다.원시 HTML 만 원하면 Indy, ICS 또는 TDownLoadURL (표준 작업)을 사용하지 않는 이유는 무엇입니까? – crefird
나는 HTML 처리가 끝나면 HTML 처리가 끝난다. 자바 스크립트는 인디, ICS 등 이후 TWebbrowser를 사용해야하는 이유이기도하다. 자바 스크립트를 실행하지 않을 것이다. – Wizzard
'innerHtml' 대신'outerHtml'을 사용하려고 했습니까? 어쩌면 그것이 효과를 낼 것입니다. 또한 TWebBrowser 컨트롤을 호스팅하는 경우 FEATURE_BROWSER_EMULATION을 사용하여 TWebBrowser가 최신 버전을 표시하도록합니다 (이 시점에서 9 번, 호스팅 된 컨트롤의 기본 모드는 7 번). 아마도 내가 테스트하지는 않았지만 아마도 속도 이점이있을 것입니다. –