AI摘要
WebView4Delphi
描述
WebView4Delphi 是一个开源项目,由Salvador Díaz Fau创建,用于将基于 Edge/Chromium 的浏览器嵌入使用 Delphi 或 Lazarus/FPC 为 Windows 制作的应用程序中。
WebView4Delphi 是 TWebBrowser 和 TEdgeBrowser 组件的替代品。它是 WebView2 框架的完整实现,经常更新,并且还支持旧版本的 Delphi。
介绍
WebView4Delphi 使用Microsoft Edge WebView2 Runtime和Microsoft.Web.WebView2 NuGet 包将 Web 浏览器嵌入到 VCL、FMX 和 LCL 应用程序中。
WebView4Delphi 加载 NuGet 包中的 WebView2Loader.dll 库并实现 WebView2 文档中描述的所有接口。
最新的 WebView4Delphi 版本使用 Microsoft.Web.WebView2 NuGet 包版本 1.0.3485.44。您可以自行下载以提取 WebView2Loader.dll 库,或使用存储库 bin32 和 bin64 目录中提供的副本。
下图描述了 WebView4Delphi 的工作原理:
链接
WebView4Delphi项目:
Microsoft Edge WebView2 运行时:
Microsoft.Web.WebView2 NuGet 包:
Chromium项目:
兼容性
Microsoft Edge WebView2 Runtime 创建了一个基于 Chromium 的 Web 浏览器,需要 Windows 10、11 或更新版本才能运行。
微软曾计划支持 MacOS 和 Linux,但他们决定停止这些计划。WebView2 仅适用于 Windows。
如果您需要在 MacOS、Linux 和 Windows 中嵌入 Web 浏览器,请考虑使用CEF4Delphi。
关于 WebView2 运行时
WebView2 运行时可以安装在运行嵌入式浏览器的每台计算机上。这称为常绿版本,由 Windows 更新自动更新。
或者,您可以部署 WebView2 运行时的固定版本,并在每次更新应用程序时手动更新它。
常绿版本允许您为您的应用程序安装一个小型安装程序,并且 Windows 将使用最新的安全补丁更新 WebView2 运行时。
嵌入式 Web 浏览器也将自动更新,这意味着您的应用程序应该定期进行测试,以防止因弃用的浏览器功能、内部浏览器问题等引起的问题。
您还必须记住,并非所有计算机都会同时更新。一些企业用户可能会很晚才收到某些 Windows 更新,因此您的应用程序必须准备好与多个浏览器版本完美兼容。
为了避免所有这些问题,您也可以使用 WebView2 Runtime 的固定版本,但随后您必须手动更新它以修补浏览器中的安全问题,并且安装程序会更大。
Windows 11 和大多数 Windows 10 设备中已包含 Microsoft Edge WebView2 运行时的常绿版本。所有演示均配置为使用常绿版本。
安装
要在 Delphi XE2、XE3、XE4、XE6、XE7、XE8、10、11、12 或 13 中构建和安装 WebView4Delphi,您需要遵循以下步骤:
- 从GitHub下载最新版本的 WebView4Delphi 。
- 将 WebView4Delphi 解压到一个目录中,并确保您的用户在该目录中具有写权限。
- 运行 Delphi。
- 打开文件packages\WebView4Delphi_group.groupproj。
- 如果要安装 FMX 和 VCL 组件,请选择“项目”→“构建所有项目”菜单选项。如果此选项失败,请分别构建 WebView4DelphiVCLRTL.bpl、WebView4DelphiFMXRTL.bpl、WebView4DelphiVCL_designtime.bpl 和 WebView4DelphiFMX_designtime.bpl(按此顺序)。构建过程结束后,请在 WebView4DelphiVCL_designtime.bpl 和 WebView4DelphiFMX_designtime.bpl 中选择“安装”上下文菜单选项。
- 如果您只想安装 VCL 组件,那么构建 WebView4DelphiVCLRTL.bpl 并安装 WebView4DelphiVCL_designtime.bpl。
要在 Delphi 6、7、8、2005、2006、2007、2009、2010 或 XE 中编译和安装 WebView4Delphi,您需要遵循以下步骤:
- 从GitHub下载最新版本的 WebView4Delphi 。
- 将 WebView4Delphi 解压到一个目录中,并确保您的用户在该目录中具有写权限。
- 运行 Delphi。
- 从具有 VCL 组件的 Delphi打开文件WebView4Delphi.dpk 。
- 单击编译按钮。
- 单击“安装”按钮。
要在 Lazarus 中编译和安装 WebView4Delphi,您需要遵循以下步骤:
- 从GitHub下载最新版本的 WebView4Delphi 。
- 将 WebView4Delphi 解压到一个目录中,并确保您的用户在该目录中具有写权限。
- 运行 Lazarus。
- 从包→打开包文件 (.lpk)...菜单打开文件packages\webview4delphi.lpk 。*
- 单击包窗口中的“编译”按钮。
- 单击“使用”按钮并选择“安装”选项。
- 当 Lazarus 询问您是否要重建 Lazarus 时,按“是”按钮。
- Lazarus 将在几秒钟内安装 WebView4Delphi 并重新启动。
第一步
强烈建议在开始使用 WebView4Delphi 之前阅读 Microsoft Edge WebView2 运行时文档。
安装 WebView2 Runtime 和 WebView4Delphi 包后,您可以构建 SimpleBrowser 演示。
请注意,主单元有一个初始化部分,用于创建和配置 GlobalWebView2Loader。该部分的最后一步是 GlobalWebView2Loader.StartWebView2 调用,它将加载 WebView2Loader.dll 库并异步创建全局浏览器环境。
您不必担心 GlobalWebView2Loader 的破坏,因为 WebView4Delphi 会在其最终完成部分之一中为您完成此操作。
GlobalWebView2Loader 创建的全局浏览器环境将被应用程序创建的所有浏览器使用。
无法预测哪一个会首先被创建:环境还是主要形式。
SimpleBrowser 尝试在 Tform.OnShow 事件中创建浏览器,但它使用计时器以防全局环境需要更多时间来创建。
WebView4Delphi 使用两个组件来创建浏览器。对于 VCL 或 LCL 应用程序,它使用 TWVBrowser 和 TWVWindowParent。对于 FMX 应用程序,它使用 TWVFMXBrowser 和 TWVFMXWindowParent。
TWVWindowParent 和 TWVFMXWindowParent 只是 WebView2 用来显示浏览器内容的控件。
最重要的组件是 TWVBrowser 和 TWVFMXBrowser,因为它们封装了大多数 WebView2 方法、属性和事件。
WindowParent组件和Browser组件是关联的,您需要设置它们的Browser属性。TWVWindowParent.Browser 必须设置为 TWVBrowser 实例,而 TWVFMXWindowParent.Browser 需要设置为 TWVFMXBrowser 实例。
浏览器是通过 TWVBrowser.CreateBrowser 或 TWVFMXBrowser.CreateBrowser 调用异步创建的。TWVBrowser.OnAfterCreated 事件将在浏览器完全初始化后触发,然后您就可以开始调用其方法了。
SimpleBrowser 将在触发OnAfterCreated事件之前开始加载在 TWVBrowser.DefaultURL 属性中设置的 URL 。
如果您检查其他演示或开始使用 TWVBrowser 事件,您会注意到 TWVBrowser 将WebView2 委托中声明的所有Invoke回调作为事件公开。
所有这些事件的参数类型与Invoke回调几乎相同,并且大多数都包含一个aArgs参数。如果您需要使用该接口,可以使用 uWVCoreWebView2Args 单元中相应的包装器。
例如,TWVBrowser.OnDownloadStarting 事件具有一个 ICoreWebView2DownloadStartingEventArgs 类型的 aArgs 参数。
正如您在 MiniBrowser 演示中看到的,我们需要用它用 TCoreWebView2DownloadStartingEventArgs 类包装它,如下所示:
TempArgs := TCoreWebView2DownloadStartingEventArgs.Create(aArgs);
所有 WebView2 接口都有一个同名的包装器,但用T替换了首字母I。
您还会注意到,大多数字符串类型的参数已被新的wvstring类型取代,因为 WebView2 在内部使用 WideStrings。
Delphi 用户可以直接将字符串分配给 wvstring 变量,但 Lazarus 用户必须使用 UTF8Decode 和 UTF8Encode 来转换它们。
关于名字
WebView4Delphi 只是一个数字缩写,应该理解为WebView for Delphi,并不意味着它基于 WebView4。