本文介绍了枚举TChromium中的DOM节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用以下代码(在XE2下)枚举DOM节点。

I am trying to enumerate DOM nodes using the following code (under XE2).

我从SO此处给出的答案中借来了大部分内容,但对于某些

I have borrowed most of this from answers given here in SO, but for some reason it's not doing anything.

IOW,从未调用ProcessDOM()。

IOW, ProcessDOM() is not ever getting called.

然后,我

有人可以告诉我我在这里做错了吗。

Could someone show me what I am doing wrong here.

在此先感谢

procedure ProcessNode(ANode: ICefDomNode);
var
  Node1: ICefDomNode;
begin
  if Assigned(ANode) then begin
    Node1 := ANode.FirstChild;
    while Assigned(Node1) do begin
      {Do stuff with node}
      ProcessNode(Node1);
      Node1 := Node1.NextSibling;
    end;
  end;
end;

procedure ProcessDOM(const ADocument: ICefDomDocument);
begin
  ProcessNode(ADocument.Body);
end;

procedure TMainForm.Chrome1LoadEnd(Sender: TObject; const ABrowser: ICefABrowser; const AFrame: ICefAFrame; AStatus: Integer);
begin
  if Assigned(AFrame) then AFrame.VisitDomProc(ProcessDOM);
end;


推荐答案

我遇到了同样的问题,并使用了演示guiclient它带有dcef3。

I had the same problem and I used the demo guiclient it comes with dcef3. With the following it works.

type TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
  protected
    function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage): Boolean; override;
end;

Chromium1.browser.SendProcessMessage(PID_RENDERER, TCefProcessMessageRef.New('visitdom'));

function TCustomRenderProcessHandler.OnProcessMessageReceived(browser: ICefBrowser; sourceProcess: TCefProcessId; message: ICefProcessMessage): Boolean;
begin
  if (message.Name = 'visitdom') then begin
    browser.MainFrame.VisitDomProc(
        procedure(const doc: ICefDomDocument)
        begin
          ProcessNode(Doc.Body);
        end);
    Result := True;
  end;
end;

initialization
  CefRenderProcessHandler := TCustomRenderProcessHandler.Create;

这篇关于枚举TChromium中的DOM节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-14 19:58