0
我看了兩個以前的問題,即。 How to get elements by name in Delphi Chromium Embedded和Delphi Embedded Chrome。這些問題和他們的答案足夠清晰,易於複製和粘貼,但它們不起作用。 visit()方法永遠不會被調用。如何在Delphi Chromium Embedded(再次)中按名稱獲取元素?
這是否仍然是正確的方式來做到這一點,或者它不應該在DCEF3中工作?還是在這裏可能會出現其他問題?
我正在使用XE2平臺windows32。
unit Unit1;
interface
uses ceflib, cefvcl, Vcl.Forms, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Controls,
System.Classes;
type
TForm1 = class(TForm)
Chromium1: TChromium;
Panel1: TPanel;
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure Button1Click(Sender: TObject);
public
end;
type
TElementNameVisitor = class(TCefDomVisitorOwn)
private
FName: string;
protected
procedure visit(const document: ICefDomDocument); override;
public
constructor Create(const AName: string); reintroduce;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Dialogs;
constructor TElementNameVisitor.Create(const AName: string);
begin
inherited Create;
FName := AName;
end;
procedure TElementNameVisitor.visit(const document: ICefDomDocument);
procedure ProcessNode(ANode: ICefDomNode);
var Node: ICefDomNode;
begin
if Assigned(ANode) then
begin
Node := ANode.FirstChild;
while Assigned(Node) do
begin
if Node.GetElementAttribute('name') = FName then
ShowMessage(Node.GetElementAttribute('value'));
ProcessNode(Node);
Node := Node.NextSibling;
end {while}
end {if};
end;
begin
ProcessNode(document.Body);
end;
procedure TForm1.Button1Click(Sender: TObject);
var visitor: TElementNameVisitor;
begin
visitor := TElementNameVisitor.Create('EuroB');
Chromium1.Browser.MainFrame.VisitDom(visitor);
end;
procedure TForm1.FormShow(Sender: TObject);
begin
Chromium1.Load('D:\Projects\Chromium\test.html');
end;
end.
這越來越成爲一個獨白,但是好的,其他人可能會尋找相同問題的解決方案...在上面,版本號是正確的,他顯示的日期是我自己的文件系統。所以新版本似乎有缺陷。 – user508402