使用 Chromium Embedded 是否可以通过 Javascript 与程序通信?
With Chromium Embedded is there a way to communicate to the program, from Javascript?
如果您的应用程序中有一个 chromium 嵌入式 Web 浏览器小部件,有没有办法通知应用程序在任何时间点发生了某些事情?例如,假设调整了一个项目的大小或单击了一个按钮,并且它是基于 javascript 的页面加载到 Chromium 嵌入式小部件中。您如何通过代码通知 C++ 或 Delphi 应用程序(或任何应用程序)并向其发送消息或回调?我正在寻找类似 sendMessage 功能的东西,以便将发生的事情反馈给应用程序。
如何执行此操作的示例可以使用 C++、.Net 或 Delphi 或任何语言...因为我可以简单地将代码移植到我的 Delphi 语言中。
换句话说,您如何从 javascript 与其中包含 chromium 嵌入式 Web 浏览器的应用程序进行通信?页面加载完成后,您可以通过发生的页面加载结束事件进行通信...但是 javascript 代码往往 运行 即使在页面加载之后,尤其是当用户使用鼠标进行操作时在页面上拖动一个项目或单击一个按钮..那么你如何随时与 C++/Delphi 应用程序通信,知道发生了什么事?
仅供参考,可以完全访问 html/java 代码,即我可以在 javascript.. 中添加我自己的代码。任何我想要的代码。所以如果有类似 sendMessageBackToApp 的东西,我想添加它。
如果这个功能不可用,它肯定会有用。应用程序与 javascipt/html 之间的通信对于应用程序真正强大至关重要。
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
在 CEF 中有两种与本机代码通信的方式。
"Asynchronous JavaScript Bindings" - 这里描述了这种方法(有一章同名):
https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage.md
您还可以创建 JS 函数对象,这些对象实际上在渲染器进程中调用您的 C++ 代码。你可以在这里读更多关于它的内容:
https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md
第二种方式更底层。您必须使用 CEF 的 IPC 机制与浏览器进程通信。
一句话:扩展。您可以从程序 (CefRegisterExtension) 中的 JS 代码中进行注册。
https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md 描述了通常的步骤。
当心 CEF 问题 1944(仍未解决)- JS 必须是防弹的,否则加载它的渲染器可能(并且会)崩溃。
如果您的应用程序中有一个 chromium 嵌入式 Web 浏览器小部件,有没有办法通知应用程序在任何时间点发生了某些事情?例如,假设调整了一个项目的大小或单击了一个按钮,并且它是基于 javascript 的页面加载到 Chromium 嵌入式小部件中。您如何通过代码通知 C++ 或 Delphi 应用程序(或任何应用程序)并向其发送消息或回调?我正在寻找类似 sendMessage 功能的东西,以便将发生的事情反馈给应用程序。
如何执行此操作的示例可以使用 C++、.Net 或 Delphi 或任何语言...因为我可以简单地将代码移植到我的 Delphi 语言中。
换句话说,您如何从 javascript 与其中包含 chromium 嵌入式 Web 浏览器的应用程序进行通信?页面加载完成后,您可以通过发生的页面加载结束事件进行通信...但是 javascript 代码往往 运行 即使在页面加载之后,尤其是当用户使用鼠标进行操作时在页面上拖动一个项目或单击一个按钮..那么你如何随时与 C++/Delphi 应用程序通信,知道发生了什么事?
仅供参考,可以完全访问 html/java 代码,即我可以在 javascript.. 中添加我自己的代码。任何我想要的代码。所以如果有类似 sendMessageBackToApp 的东西,我想添加它。
如果这个功能不可用,它肯定会有用。应用程序与 javascipt/html 之间的通信对于应用程序真正强大至关重要。
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
在 CEF 中有两种与本机代码通信的方式。
"Asynchronous JavaScript Bindings" - 这里描述了这种方法(有一章同名): https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage.md
您还可以创建 JS 函数对象,这些对象实际上在渲染器进程中调用您的 C++ 代码。你可以在这里读更多关于它的内容: https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md
第二种方式更底层。您必须使用 CEF 的 IPC 机制与浏览器进程通信。
一句话:扩展。您可以从程序 (CefRegisterExtension) 中的 JS 代码中进行注册。 https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md 描述了通常的步骤。 当心 CEF 问题 1944(仍未解决)- JS 必须是防弹的,否则加载它的渲染器可能(并且会)崩溃。