DCEF3 - Delphi Chromium Embedded - Javascript与应用程序代码之间的通信

4
我正在使用DCEF3,修订版本是24038bd3a600,我想要在浏览器中的Javascript代码和应用程序中的Delphi代码之间进行通信。我知道可以通过框架方法“ExecuteJavascript”从Delphi代码和Javascript中实现,但是如何实现反向通信(从Javascript到Delphi/应用程序代码)呢?我在演示/示例(特别是GUIclient)中没有找到这样的情况。

1
你需要注册一个V8扩展(调用本地函数的JavaScript代码);你可以在这个答案中看到一个例子。 - Sga
好的,我已经在旧版本(DCEF 而非 DCEF3)中完成了,但是现在在 DCEF3 中似乎不起作用。 您确定仍然可以这样做吗? - henry60
1
看起来 ceflib.pas 引用了 cef_register_extension在这里 你可以找到一个例子。 - Sga
1
它不起作用,CefRegisterExtension总是返回false,并且扩展在网页中不起作用。 - henry60
1
你能测试 guiclient 吗?它里面有一个扩展的测试,可以在这个源代码的末尾看到。 - Sga
显示剩余2条评论
2个回答

3

如果要实现这个功能,官方源代码中有一个 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代码,但我认为这种方式更安全。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接