С Chromium Embedded есть способ общаться с программой, от Javascript?

Если у вас есть встроенный виджет веб-браузера Chrome в приложении, есть ли способ уведомить приложение о том, что что-то произошло в любой момент времени? например, можно изменить размер элемента или нажать кнопку, и это страница на основе javascript, загружаемая в встроенный виджет хрома. Как вы уведомляете приложение C ++ или Delphi (или любое приложение) с помощью кода и отправляете сообщение или обратный вызов? Я ищу что-то вроде функции sendMessage, чтобы вернуться к приложению, что что-то произошло.

Примеры того, как это сделать, могут быть в C ++, .Net или Delphi или на любом языке ... поскольку я мог просто переносить код на мой язык Delphi.

Другими словами, как вы общаетесь с javascript, с приложением, в котором есть встроенный веб-браузер Chrome? Когда страница загружается, вы можете общаться через это событие завершения страницы, которое происходит ... однако код javascript имеет тенденцию запускаться даже после загрузки страницы, особенно если пользователь использует мышь, чтобы перетащить элемент на странице или щелкнуть кнопка. Итак, как вы связываетесь с приложением C ++ / Delphi в любое время, что-то случилось?

FYI доступен полный доступ к html / java-коду, т.е. я могу добавить свой собственный код в javascript .. любой код, который я хочу. Поэтому, если есть что-то вроде sendMessageBackToApp, я хотел бы добавить его.

Если эта функция недоступна, это, безусловно, было бы полезно. Связь между приложением и javascipt / html имеет важное значение для того, чтобы приложение было действительно мощным.

c#,c++,delphi,chromium-embedded,

0

Ответов: 3


1 принят

Существует два способа связи с собственным кодом в CEF.

  1. «Асинхронные привязки JavaScript» - этот подход описан здесь (есть глава с тем же именем): https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage.md

  2. Вы также можете создавать объекты функции JS, которые на самом деле вызывают ваш код C ++ в процессе рендеринга. Подробнее об этом можно узнать здесь: https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md

Второй способ - более низкий уровень. Вам нужно будет взаимодействовать с процессом браузера с помощью механизма IPC CEF.


2

Следующее дополнение к демо-версии Chromium GuiClient для меня в D7:

procedure TMainForm.TestJS;
begin
  if crm.Browser <> nil then
    crm.Browser.MainFrame.ExecuteJavaScript(
      'alert(''JavaScript execute works!''); console.log(''From Javascript'')', 'about:blank', 0);
end;

procedure TMainForm.crmConsoleMessage(Sender: TObject; const browser:
    ICefBrowser; const message, source: ustring; line: Integer; out Result:
    Boolean);
begin
  ShowMessage('OnConsoleMessage: ' + Message);
  Result := True;
end;

См. Здесь для более полного обсуждения: https://groups.google.com/forum/#!topic/delphichromiumembedded/uDxAUTvXqzc


0

Одним словом: расширения. Вы можете зарегистрировать из JS-кода программы (CefRegisterExtension) изнутри. https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md описывает обычные шаги. Остерегайтесь проблемы CEF 1944 года (до сих пор не решены). JS должен быть пуленепробиваемым или загружать рендеринг, который может (и это произойдет) сбой.

C #, C ++, Delphi, хром встраиваемый,
Похожие вопросы