在 Delphi 中使用 WebView2 控件时,可以通过与 JavaScript 进行交互,扩展 JavaScript 函数以调用 Delphi 中的功能。实现这一点的关键是通过 WebView2 提供的 AddHostObjectToScript
方法,将 Delphi 对象注入到 JavaScript 中。然后,你可以在 JavaScript 中调用这些对象的方法。
以下是一个完整的示例,展示如何实现 window.Helper.close()
调用 Delphi 中的关闭程序的功能。
实现步骤
-
创建 Delphi 对象并暴露方法: 定义一个 Delphi 对象,它包含一个关闭程序的方法。
-
将对象注入到 JavaScript 环境: 使用 WebView2 的
AddHostObjectToScript
方法,将该对象注入到 JavaScript 中。 -
在 JavaScript 中调用该方法: 通过
window.Helper.close()
来调用 Delphi 的方法。
代码示例
1. 定义 Delphi 对象
type
TScriptHelper = class(TObject)
public
procedure CloseApplication;
end;
procedure TScriptHelper.CloseApplication;
begin
// 关闭应用程序
Application.Terminate;
end;
2. 将对象注入到 JavaScript 中
uses
Winapi.ActiveX, Vcl.Forms, uScriptHelper, Edge, Edge.VCL;
procedure TForm1.FormCreate(Sender: TObject);
var
ScriptHelper: TScriptHelper;
begin
// 创建 TScriptHelper 实例
ScriptHelper := TScriptHelper.Create;
// 将对象注入到 JavaScript 中,命名为 "Helper"
WebView2.CoreWebView2.AddHostObjectToScript('Helper', ScriptHelper);
end;
3. 在 JavaScript 中调用 Delphi 方法
在加载的 HTML/JavaScript 文件中,你可以这样使用:
window.Helper.close();
当在 JavaScript 中调用 window.Helper.close()
时,它将会触发 Delphi 中的 TScriptHelper.CloseApplication
方法,从而关闭应用程序。
关键点
- 线程安全:在 WebView2 与 Delphi 的交互中,注意线程安全。如果需要在 UI 线程上执行某些操作,使用
TThread.Synchronize
来确保操作在主线程上运行。 - 安全性:暴露给 JavaScript 的对象和方法要确保安全,避免恶意 JavaScript 执行敏感操作。
这样,您就可以通过 JavaScript 触发 Delphi 中的功能,例如关闭应用程序。