8

目前我们使用TWebBrowser组件将 IE 嵌入到我们的桌面应用程序中。为了从在嵌入式浏览器中运行的脚本调用 Delphi 代码,我们实现了对window.external对象的支持,如下所述:http: //www.delphidabbler.com/articles/article-22

现在,由于许多原因,我们需要切换到现代浏览器。我们已经升级到引入了新TEdgeBrowser组件(基于 Chromium 的 MS Edge)的 Delphi 10.4。是否可以使用window.external也用于TEdgeBrowser?如果是这样,怎么做?或者还有其他方法如何从嵌入式浏览器中的脚本调用本机代码?

4

1 回答 1

4

最后它很简单。感谢 TOndrej 提供的“入门”链接,它帮助我解决了这个问题。我还意识到它可以与 MS Edge Beta (84.0.522.28) 一起使用,因此不需要金丝雀,如 Marco Cantu 所述:https ://blog.marcocantu.com/blog/2020-may-edge-browser-component.html . 我希望它很快就能与官方的 MS Edge 一起使用。以下是一些代码片段:

德尔福:

procedure TForm1.Button1Click(Sender: TObject);
begin
  EdgeBrowser1.Navigate(ExtractFilePath(ParamStr(0))  + 'index.html');
end;

procedure TForm1.EdgeBrowser1WebMessageReceived(Sender: TCustomEdgeBrowser; Args: TWebMessageReceivedEventArgs);
var
  Msg: PChar;
begin
  Args.ArgsInterface.Get_webMessageAsJson(Msg);
  MessageBox(Handle, Msg, PChar(EmptyStr), MB_OK);
end;

HTML:

<!DOCTYPE html>
<html>
<body>
    <p onclick="handleClick()">Click me</p>
    <script>
        function handleClick() {
            window.chrome.webview.postMessage({ data: 'Message from Edge Chromium', url: window.document.URL });
        }
    </script>
</body>
</html> 

在此处输入图像描述

于 2020-07-06T15:56:49.407 回答