2015-11-02 97 views
0

我看了兩個以前的問題,即。 How to get elements by name in Delphi Chromium EmbeddedDelphi 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. 

回答

0

在DCEF3中似乎存在版本問題。我剛剛從http://delphichromiumembedded.googlecode.com/svn/trunk/得到了一份新的副本,現在我的代碼被叫做。我不確定要報告哪些相關版本號。對於LibCef.dll:

:libcef.dll有版本1.1364.1123.0

:libcef.dll有版本3.2171.1979.0

陌生號碼,但日期顯示,低版本nulber是一個更近期的編譯。

+0

這越來越成爲一個獨白,但是好的,其他人可能會尋找相同問題的解決方案...在上面,版本號是正確的,他顯示的日期是我自己的文件系統。所以新版本似乎有缺陷。 – user508402