我正在使用DCEF3,修订版本是24038bd3a600,我想要在浏览器中的Javascript代码和应用程序中的Delphi代码之间进行通信。我知道可以通过框架方法“ExecuteJavascript”从Delphi代码和Javascript中实现,但是如何实现反向通信(从Javascript到Delphi/应用程序代码)呢?我在演示/示例(特别是GUIclient)中没有找到这样的情况。
如果要实现这个功能,官方源代码中有一个 guiclient 演示。查看main.pas 文件。
以下代码是类扩展:
class function TTestExtension.hello: string;
begin
Result := 'Hello from Delphi';
end;
TCefRTTIExtension.Register('app', TTestExtension);
<script>
alert ( app.hello() );
</script>
crm.Browser.MainFrame.ExecuteJavaScript('alert ( app.hello() );', 'about:blank', 0);
一个相当简单的解决方案是捕获浏览器的OnJSDialog / OnConsoleMessage事件,在需要执行某些操作时使用JS进行警报/日志记录。在警报消息中告诉Delphi部分要做什么。您需要将其解释为字符串(可能使用脚本库或直接解析)。不能直接调用Delphi代码,但我认为这种方式更安全。
ceflib.pas
引用了cef_register_extension
。在这里 你可以找到一个例子。 - Sgaguiclient
吗?它里面有一个扩展的测试,可以在这个源代码的末尾看到。 - Sga