delphi – Chromium:如何获取所有形式的加载页面
发布时间:2020-12-15 04:13:26 所属栏目:大数据 来源:网络整理
导读:我尝试获取所有加载页面形式的名称.我这样做了: procedure TForm2.Button2Click(Sender: TObject);var L: TStringList;begin L := TStringList.Create; try Chromium1.Browser.MainFrame.VisitDomProc( procedure (const doc: ICefDomDocument) procedure I
我尝试获取所有加载页面形式的名称.我这样做了:
procedure TForm2.Button2Click(Sender: TObject); var L: TStringList; begin L := TStringList.Create; try Chromium1.Browser.MainFrame.VisitDomProc( procedure (const doc: ICefDomDocument) procedure IterateNodes(Node: ICefDomNode); begin if not Assigned(Node) then Exit; repeat if Node.ElementTagName = 'FORM' then L.Add(Node.GetElementAttribute('name')); if Node.HasChildren then IterateNodes(Node.FirstChild); Node := Node.NextSibling; until not Assigned(Node); end; begin IterateNodes(doc.Body); end ); ShowMessage(L.Text); finally FreeAndNil(L); end; end; 但我没有任何结果.任何的想法? 谢谢 解决方法
使用XE2 Update 4
我已经意识到程序流在运行procedure参数时会继续运行,因此在到达ShowMessage时仍然没有运行此过程,因此TStringList为空. 我已经放置了一个布尔变量控件,它工作正常,但这不是一个优雅的解决方案. 这里有新代码: procedure TForm2.Button2Click(Sender: TObject); var L: TStringList; Finish: Boolean; begin L := TStringList.Create; Finish := False; try Chromium1.Browser.MainFrame.VisitDomProc( procedure (const doc: ICefDomDocument) procedure IterateNodes(Node: ICefDomNode); begin if not Assigned(Node) then Exit; repeat if SameText(Node.ElementTagName,'FORM') then begin L.Add(Node.GetElementAttribute('name')); end; if Node.HasChildren then IterateNodes(Node.FirstChild); Node := Node.NextSibling; until not Assigned(Node); end; begin IterateNodes(doc.Body); Finish := True; end ); repeat Application.ProcessMessages until (Finish); ShowMessage(L.Text); finally FreeAndNil(L); end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |