获取已加载页面的所有形式

获取已加载页面的所有形式

我尝试获取已加载页面的所有形式的名称。我已经做到了:

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

我已经意识到,在运行过程参数时,程序流程将继续进行,以便到达ShowMessage时仍未运行该过程,因此TStringList为空。

我放置了一个 bool 型变量控件,它工作正常,但这不是一个很好的解决方案。

这里是新代码:

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;

关于delphi - Chromium:如何获取已加载页面的所有形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12866605/

10-12 13:35