uses
cef3own, cef3intf, cef3types, cef3ref, cef3lib, gettext,
sysutils, cef3lcl, Forms, StdCtrls, EditBtn, ExtCtrls;
type
TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
protected
function OnProcessMessageReceived(const browser: ICefBrowser; sourceProcess: TCefProcessId;
const message: ICefProcessMessage): Boolean; override;
end;
...
procedure VisitNode(Node: ICefDomNode; Depth: Integer);
var
i: Integer;
begin
if not Assigned(Node) then Exit;
if not Node.IsText then begin
for i := 1 to Depth do Write(' ');
WriteLn(Node.ElementTagName);
end;
VisitNode(Node.FirstChild, Depth + 2);
VisitNode(Node.NextSibling, Depth);
end;
procedure VisitDOM(const Document: ICefDomDocument);
begin
// VisitNode(Document.Document, 0);
VisitNode(Document.Body, 0);
end;
function TCustomRenderProcessHandler.OnProcessMessageReceived
(const browser: ICefBrowser; sourceProcess: TCefProcessId;
const message: ICefProcessMessage): Boolean;
begin
case message.Name of
'visitdom':
begin
browser.MainFrame.VisitDomProc(@VisitDOM);
Result := True;
end;
else
Result := inherited;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Chromium.Browser.SendProcessMessage(PID_RENDERER, TCefProcessMessageRef.New('visitdom')) then
WriteLn('Triggered DOM visit.')
else
WriteLn('Failed to start DOM visit.');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
PrjPath: ustring;
Lang, FallbackLang: string;
begin
CefRenderProcessHandler := TCustomRenderProcessHandler.Create;
PrjPath := UTF8Decode(GetCurrentDir + PathDelim);
CefLocalesDirPath := PrjPath + 'locales';
GetLanguageIDs(Lang, FallbackLang);
CefLocale := UTF8Decode(FallbackLang);
edtURL.Text := 'http://forum.lazarus.freepascal.org/index.php/board,21.0.html/';
end;