Editar Ich habe es auf diese 1 Zeile eingegrenzt,
HTML := wb.OleObject.Document.documentElement.innerHTML;
die Zeit verbraucht... wie kann das beschleunigt werden?
Mit dem folgenden Code kann meine Anwendung für 1-2 Sekunden hängen, während sie versucht, auf den HTML-Code einer Seite zuzugreifen (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;
Allerdings bemerke ich in meiner GetHTML-Methode kann 1-2 Sekunden dauern, um etwas zurückzugeben und es sperrt UI. Ein Blick auf die AQTime mit Delphi XE sagt, dass der Methodenaufruf langsam ist (1-2 Sekunden). Es ist sporadisch und ich frage mich, ob es fehlschlägt, wenn die Seite noch mitten im Laden ist.
Die Seite, die ich lade, ist eine Inhouse-Seite, voll von Javascript und 500k groß, ich kann nicht die OnDocumentComplete verwenden, weil es feuert, bevor die Seite sogar bereit ist, auch wenn ich eine Überprüfung der ReadyState es noch zu früh feuert.
Kann mir jemand sagen, ob es einen schnelleren Weg gibt, um auf das HTML von TWebbrowser zuzugreifen?