【发布时间】:2012-03-27 22:19:04
【问题描述】:
使用 CEF 浏览器,我尝试挂钩 OnLoadEnd 事件以遍历 DOM 树。
出于某种奇怪的原因,我调用了两次 VisitDom。
procedure TForm1.FormCreate(Sender: TObject);
begin
FBrowser := TChromium.Create(Self);
FBrowser.Parent := TWinControl(Self);
FBrowser.OnLoadEnd := BrowserOnLoadEnd;
FBrowser.Load('http://google.com');
end;
procedure VisitDom(const Document: ICefDomDocument);
begin
ShowMessage(Document.Document.Name);
end;
procedure TForm1.BrowserOnLoadEnd(Sender: TObject;
const Browser: ICefBrowser; const Frame: ICefFrame; HttpStatusCode: Integer;
out Result: Boolean);
var
Visitor: TCefFastDomVisitor;
begin
if HttpStatusCode = 200 then
begin
Visitor := TCefFastDomVisitor.Create(VisitDom);
FBrowser.Browser.MainFrame.VisitDom(Visitor);
end;
end;
知道为什么 OnLoadEnd 会被多次调用吗?
【问题讨论】:
-
请问您是如何得出“BrowserOnLoadEnd”被调用两次的结论的?你在“开始”上放了一个断点还是?没用过CEF,但是有一种奇怪的感觉,这个“FBrowser.Browser.MainFrame.VisitDom”是“double”事件的生成器。
-
P.S.我还看到一个“输出结果:布尔值”,您不应该确保(结果 = True)吗?再次,我问不确定..
-
只是想知道:为什么在设置浏览器的父级时将 TWinControl 派生类 TForm1 强制转换为 TWinControl?那不是尼斯。 (例如 TWinControl(Self);
-
我确信它被调用了两次,因为我的调试器在 BrowserOnLoadEnd 上停止了两次。结果总是假的。
标签: delphi delphi-xe2 chromium onload-event tchromium