TChromium OnClick

Я хочу отследить, сколько кликов пользователь сделал внутри TChromium. Мне все равно, если он нажимает на "пустое место"/ ссылку / кнопку / изображение / и т.д.. Я просто хочу знать, сколько кликов он сделал. Я надеялся, что в TChromium есть событие Onclick, но его нет. Как я могу узнать, что пользователь нажимает?

1 ответ

Решение

Вы можете добавить прослушиватель событий. Проблема здесь в том, что CEF3 не поддерживает прослушиватели событий DOM, как CEF1, поэтому там не все так просто (хотя и невозможно). Это может быть довольно грязный обходной путь, прежде чем я попытаюсь создать пример взаимодействия с V8. Вы создаете достаточно уникальную строку, добавляете прослушиватель событий для всего документа, и в этом случае вы регистрируете сообщение с этой уникальной строкой. И в Delphi вы будете ждать это уникальное сообщение журнала, например:

const
  MyClickMessage = '08B52B44-748F-44BB-AC6C-5179D6C1F523';

procedure TForm1.Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser;
  const frame: ICefFrame; httpStatusCode: Integer);
begin
  if frame.IsMain then
    frame.ExecuteJavaScript(
      'document.addEventListener("click", function(evnt){' +
          'console.log("' + MyClickMessage + '");' +
      '});',
      '',
      0);
end;

procedure TForm1.Chromium1ConsoleMessage(Sender: TObject; const browser: ICefBrowser;
  const message, source: ustring; line: Integer; out Result: Boolean);
begin
  if message = MyClickMessage then
  begin
    Result := True;
    ShowMessage('User clicked!');
  end;
end;

Хаки, верно:)? Я постараюсь придумать что-нибудь получше (используя двигатель V8)..

Другие вопросы по тегам