FAQ VCL
Компоненты\Chromium (dcef3)

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как выводить подсказки в StatusBar'е?

procedure TForm1.Chromium1StatusMessage(Sender: TObject;
  const browser: ICefBrowser; const value: ustring);
begin
   StatusBar1.SimpleText := value;
end;


Как вывести страницу на печать?

procedure TForm1.Button1Click(Sender: TObject);
begin
   Chromium1.Browser.Host.Print;
end;


Как добавить свой пункт в контекстное меню?

uses
  {...,} ceflib;

const
  CUSTOMMENUCOMMAND_INSPECTELEMENT = 7241221;

procedure TForm1.Chromium1BeforeContextMenu(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const params: ICefContextMenuParams; const model: ICefMenuModel);
begin
   model.AddItem(CUSTOMMENUCOMMAND_INSPECTELEMENT, 'Some menu item');
end;

procedure TForm1.Chromium1ContextMenuCommand(Sender: TObject;
  const browser: ICefBrowser; const frame: ICefFrame;
  const params: ICefContextMenuParams; commandId: Integer;
  eventFlags: TCefEventFlags; out Result: Boolean);
begin
   Result := False;
   if (commandId = CUSTOMMENUCOMMAND_INSPECTELEMENT) then
      ShowMessage('Some menu item');
end;


Как отловить переход фокуса на странице?

uses
  {...,} ceflib;

type
  TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
  protected
    procedure OnFocusedNodeChanged(const browser: ICefBrowser;
      const frame: ICefFrame; const node: ICefDomNode); override;
  end;

implementation

{ TCustomRenderProcessHandler }

procedure TCustomRenderProcessHandler.OnFocusedNodeChanged(
  const browser: ICefBrowser; const frame: ICefFrame; const node: ICefDomNode);
begin
   inherited;
   // Первое условие необходимо для того, чтобы не получить
   // exception на последней строчке при выходе из программы
   if not Application.Terminated then
      if Assigned(node) then
         Form1.Caption := node.Name
      else
         Form1.Caption := '';
end;

initialization
  CefRenderProcessHandler := TCustomRenderProcessHandler.Create;


Как зарегистрировать в JavaScript свой объект?

uses
  {...,} ceflib;

type
  TTestExtension = class
  public
    class function hello: string;
    class function showVersion(msg: string): string;
  end;

  TConsoleExtension = class
  public
    class procedure log(msg: string);
  end;

  TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
  protected
    procedure OnWebKitInitialized; override;
  end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
   Chromium1.Load('file:///' + ExtractFilePath(ParamStr(0)) + 'test.html');
   
// код загружаемого файла:
// <html>
//    <head>
//       <script>
//          alert(app.showVersion(navigator.userAgent));
//          function loadPage() {
//             console.log("Page loaded.");
//          }
//       </script>
//    </head>
//    <body bgcolor='yellow' onload="loadPage()" />
// </html>
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   // Вызов метода hello из зарегистрированного в JavaScript'е объекта app
   Chromium1.Browser.MainFrame.ExecuteJavaScript('alert(app.hello());', 'about:blank', 0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   // Вызов метода log из зарегистрированного в JavaScript'е объекта console
   Chromium1.Browser.MainFrame.ExecuteJavaScript('console.log("Message from Delphi");', 'about:blank', 0);
end;

procedure TForm1.Chromium1ConsoleMessage(Sender: TObject;
  const browser: ICefBrowser; const message, source: ustring;
  line: Integer; out Result: Boolean);
begin
   // Этот метод не будет вызываться, так как мы зарегистрировали свой
   // объект console, перекрыв тем самым одноименный объект из JavaScript
   ShowMessage(message);
   Result := True;
end;

{ TTestExtension }

class function TTestExtension.hello: string;
begin
   // JavaScript покажет сообщение,
   // полученное из Delphi
   Result := 'Hello from Delphi';
end;

class function TTestExtension.showVersion(msg: string): string;
begin
   // Этот метот "дергается" JavaScript'ом
   // из загруженной страницы
   Result := 'Browser: ' + msg;
end;

{ TConsoleExtension }

class procedure TConsoleExtension.log(msg: string);
begin
   // Перехват сообщений,
   // выводимых в console.log
   ShowMessage(msg);
end;

{ TCustomRenderProcessHandler }

// Регистрация объектов в JavaScript
procedure TCustomRenderProcessHandler.OnWebKitInitialized;
begin
   inherited;
   TCefRTTIExtension.Register('app', TTestExtension);
   // Будьте внимательны, при регистрации объекта console
   // событие OnConsoleMessage вызываться не будет!
   TCefRTTIExtension.Register('console', TConsoleExtension);
end;

initialization
  CefRenderProcessHandler := TCustomRenderProcessHandler.Create;

При использовании материала - ссылка на сайт обязательна