【问题标题】:DCEF3 - Delphi Chromium Embedded - communication between Javascript and application codeDCEF3 - Delphi Chromium Embedded - Javascript 和应用程序代码之间的通信
【发布时间】:2014-07-09 07:32:17
【问题描述】:

我正在使用 DCEF3,修订版 24038bd3a600,我希望在浏览器中的 Javascript 代码和应用程​​序的 Delphi 代码之间进行通信。 我知道如何通过使用框架的方法“ExecuteJavascript”从 Delphi 代码和 Javascript 来完成它,但是反过来(从 Javascript 到 Delphi/应用程序代码)呢? 在演示/示例(GUIclient,特别是...)中我没有发现这种情况。

【问题讨论】:

  • 你必须注册一个V8扩展(调用原生函数的JavaScript代码);您可以在this answer 中查看示例
  • 好的,我在旧版本(DCEF,不是 DCEF3)中这样做了,但现在在 DCEF3 中它似乎不起作用。您确定仍然可以这样做吗?
  • 看来是这样,ceflib.pas 引用了cef_register_extensionHere你可以找到一个例子
  • 它不起作用,CefRegisterExtension 总是返回 false 并且扩展在网页中不起作用。
  • 你能测试guiclient吗?里面有一个扩展测试,见末尾this source code

标签: delphi chromium-embedded


【解决方案1】:

有一个 guiclient 演示如果官方源代码可以做到这一点。看main.pas文件。

下面的代码是一个类扩展:

class function TTestExtension.hello: string;
begin
  Result := 'Hello from Delphi';
end;

下面的代码注册扩展类:

TCefRTTIExtension.Register('app', TTestExtension);

下面的代码从 HTML 页面调用您的本地代码:

<script>
alert ( app.hello() );
</script>

以下代码从嵌入式浏览器调用您的本机代码:

crm.Browser.MainFrame.ExecuteJavaScript('alert ( app.hello() );', 'about:blank', 0);

【讨论】:

    【解决方案2】:

    一个非常简单的解决方法是捕获浏览器的 OnJSDialog / OnConsoleMessage 事件,当有要执行的东西时在 JS 中执行警报/登录。告诉警报消息中的 delphi 部分要做什么。您需要将其解释为字符串(可能使用脚本库或直接解析)。无法直接调用 delphi 代码,但我想这样更安全。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多