作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我们使用TWebBrowser
将 IE 嵌入到我们的桌面应用程序的组件。为了从在嵌入式浏览器中运行的脚本调用 Delphi 代码,我们实现了对 window.external
的支持。此处描述的对象:http://www.delphidabbler.com/articles/article-22
现在,由于许多原因,我们需要切换到现代浏览器。我们已经升级到 Delphi 10.4,它引入了新的 TEdgeBrowser
组件(基于 Chromium 的 MS Edge)。是否可以使用 window.external
也适用于 TEdgeBrowser
?如果是这样,怎么做?或者还有其他方法如何从嵌入式浏览器中的脚本调用 native 代码?
最佳答案
最后它很简单。感谢 TOndrej 提供的“入门”链接,它帮助我解决了这个问题。我还意识到它可以与 MS Edge Beta (84.0.522.28) 一起使用,因此不需要像 Marco Cantu 所述的 Canary: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>
关于delphi - TEdgeBrowser 组件 : calling native code from a script running on the embedded web page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62382813/
我是一名优秀的程序员,十分优秀!