Delphi XE3 and TChromium



在Delphi XE3 TChromium中制作一个组件需要得到的内容页面是加载的论坛找到了工作代码的示例:

procedure DoWork (const doc: ICefDomDocument);
var
  q: ICefDomNode;
begin
  q: = doc.GetElementById ('q');
  if Assigned (q) then q.SetElementAttribute ('value', 'Hello, world');
end;
procedure actDomExecute;
var
  q: ICefDomNode;
begin
   crm.Browser.MainFrame.VisitDomProc (DoWork);
end;

但是调试器以某种方式绕过了顽固的DoWork的执行。在什么可能是一个陷阱?

我得到了tChromium在Delphi 7下工作,它应该都是一样的。

下面是我从DOM 中读取元素的步骤

首先,我从这个项目得到了一个包装器:https://code.google.com/p/delphichromiumembedded/downloads/detail?name=dcef-r306.7z&可以= 2,q =

也有一个XE2,将不需要太多的转换为XE3,如果你需要帮助,我会很乐意帮助的请求。

然后在

中声明开始和结束
procedure TMainForm.crmLoadStart(Sender: TObject;   const browser: ICefBrowser; const frame: ICefFrame); begin   
  if (browser <> nil) and (browser.GetWindowHandle = crm.BrowserHandle) and ((frame = nil) or (frame.IsMain)) then FLoading := True; 
end;

procedure TMainForm.crmLoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer; out Result: Boolean);
begin
  if (browser <> nil) and (browser.GetWindowHandle = crm.BrowserHandle) and ((frame = nil) or (frame.IsMain)) then begin
    FLoading := False;
    // see if loaded
    while(httpStatusCode <> 200) do begin
      Application.ProcessMessages;
      Sleep(50);
    end;
    browser.GetMainFrame.VisitDomProc(DomProc);
  end;
end;

声明一个名为domproc的过程,如下所示:

procedure DomProc(const Doc: ICefDomDocument);
var
  Node: ICefDomNode;
begin
  url := Doc.BaseUrl;
  if(url='www.goodwebsite.com') then // check if it is the right page and not add
    Node := Doc.Body.Document.GetElementById('idofwhatyouarelookingfor');
  Node.SetElementAttribute('value','Hello world :D');
end;

这是迄今为止我发现的最可靠的方法,您需要确保页面加载良好,并且您正在获得正确框架的dom。

希望它能帮助你,一定要看看上面的下载链接中的示例代码,它对我帮助很大。

有乐趣的编码,Delphi岩石!

相关内容

  • 没有找到相关文章

最新更新