使用 Delphi + WebView4Delphi 初步使用完整指南
WebView4Delphi 可以做什么
WebView4Delphi 是 Delphi/ C++Builder 的浏览器控件封装,基于 Microsoft Edge WebView2。简单来说,它可以在 Delphi 桌面程序里嵌入完整的 Chromium 内核浏览器,支持最新的网页标准和功能。
WebView4Delphi 不仅是一个“浏览器控件”,更是 Delphi 桌面应用与现代 Web 技术的桥梁。
你可以把它当作:内嵌网页的 UI 窗口/桌面自动化工具/脚本和插件平台
它能做的事情几乎只受你的 Delphi 与 JS 技能限制。
一.下载与安装 WebView4Delphi
从 GitHub 官方仓库下载 WebView4Delphi:
访问 https://github.com/salvadordf/WebView4Delphi,选择 Code → Download ZIP 下载压缩包,或通过 Git 命令克隆仓库:git clone https://github.com/salvadordf/WebView4Delphi.git

二.安装 Edge WebView2 Runtime
依赖:从 Microsoft 官方下载 Evergreen 版本:
https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section
详细的安装方法
安装完成后需重启系统。
三.安装 WebView4Delphi
1.下载好的WebView4Delphi-main.zip压缩文件进行解压
2.用delphi13打开在目录下的 .\packages\WebView4Delphi.dpk
3.右上的projects窗口右击WebView4Delphi.bpl然后点Build(或 Compile)

4.如果提示在这里WebView4DelphiVCL_register.pas出错 就注释掉出错的代码这些是LOGO没有关系的
uses {$IFDEF DELPHI16_UP} System.Classes, Winapi.Windows, System.SysUtils, //{$IFDEF ADDSPLASHSCREENLOGO}ToolsApi,{$ENDIF} {$ELSE} Classes, Windows, SysUtils, {$ENDIF} uWVBrowser, uWVWindowParent; {$IFDEF DELPHI16_UP}{$IFDEF ADDSPLASHSCREENLOGO} procedure AddBitmapToSplashScreen; const {$I ..\source\uWVVersion.inc} var TempBitmap : HBITMAP; TempVersion : string; begin // 添加 IDE 启动画面 Logo(可删除) // if assigned(SplashScreenServices) then // begin // TempBitmap := LoadBitmap(FindResourceHInstance(HInstance), 'WebView2'); // try // TempVersion := IntToStr(WEBVIEW2LOADERLIB_VERSION_MAJOR) + '.' + // IntToStr(WEBVIEW2LOADERLIB_VERSION_MINOR) + '.' + // IntToStr(WEBVIEW2LOADERLIB_VERSION_RELEASE) + '.' + // IntToStr(WEBVIEW2LOADERLIB_VERSION_BUILD); // // SplashScreenServices.AddPluginBitmap('WebView4Delphi ' + TempVersion, TempBitmap, False, 'MIT license'); // finally // DeleteObject(TempBitmap); // end; // end; end; {$ENDIF}{$ENDIF} 5.编译成功会显示再次右键WebView4Delphi.bpl这个包点击 Install
安装成功后,在Palette组件栏将显示 TWVBrowser 控件。

6.把路径添加到库
菜单 Tools → Options → Language → Delphi → Library Path
把WebView4Delphi目录下.\packages和.\source 加进去

五 . 初始使用复制 WebView2Loader.dll
非常关键的一步!!! 因为如果不复制这文件,程序会启动会出错。
在下载的WebView4Delphi目录下找到bin32文件夹或bin64文件夹:
如果你的开发程序是32位 那么就复制 .\bin32\WebView2Loader.dll
如果你的开发程序是64位 那么就复制 .\bin64\WebView2Loader.dll
复制到你的项目根目录(与 EXE 文件同一层)。

WebView2Loader.dll 历史版本
https://www.nuget.org/stats/packages/Microsoft.Web.WebView2?groupby=Version
常见问题解决
组件未显示问题:
确认 .bpl 文件已正确安装,检查 Delphi 是否重启。验证 Edge WebView2 Runtime 是否安装成功。
初始化错误(InitializationError):
确保程序以管理员权限运行,检查系统环境变量是否包含 WebView2 路径。可通过代码检测错误:
if GlobalWebView2Loader.InitializationError then ShowMessage(GlobalWebView2Loader.ErrorMessage); 初始使用
确认 CreateBrowser 方法在 FormShow 事件中调用,避免在 FormCreate 中初始化。
逻辑控件WVBrowser
时间控件Timer
网页显示控件 WVWindowParent1 把它放在窗体上属性Browser:=WVBrowser1;
基础使用示例
以下代码演示加载网页的基本流程:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,Vcl.Controls, Vcl.Forms, Vcl.Dialogs,Vcl.StdCtrls,Vcl.ExtCtrls,Vcl.ComCtrls, Winapi.WebView2, Winapi.ActiveX, uWVBrowserBase, uWVBrowser,uWVWinControl, uWVWindowParent, uWVLoader,uWVCoreWebView2Args, uWVTypes,uWVTypeLibrary; type TForm1 = class(TForm) ButtonLoad: TButton; Timer1: TTimer; WVBrowser1: TWVBrowser; WVWindowParent1: TWVWindowParent; procedure ButtonLoadClick(Sender: TObject); procedure WVBrowser1AfterCreated(Sender: TObject); procedure FormShow(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // 窗体显示时触发 procedure TForm1.FormShow(Sender: TObject); begin Timer1.Enabled:=False; WVWindowParent1.Browser:=WVBrowser1; // 检查 WebView2 加载器初始化是否出错 if GlobalWebView2Loader.InitializationError then ShowMessage(GlobalWebView2Loader.ErrorMessage) // 显示错误信息 else // 如果 WebView2 已经初始化成功 if GlobalWebView2Loader.Initialized then // 创建浏览器控件,并指定父窗口句柄 WVBrowser1.CreateBrowser(WVWindowParent1.Handle) else // 如果还未初始化完成,则启用定时器等待 Timer1.Enabled := True; end; // 当点击按钮时,加载指定网页 procedure TForm1.ButtonLoadClick(Sender: TObject); begin // 使用 TWVBrowser 的 Navigate 方法打开网页 WVBrowser1.Navigate('https://www.baidu.com'); end; // 当 WVBrowser 控件完成创建后触发 procedure TForm1.WVBrowser1AfterCreated(Sender: TObject); begin // 更新浏览器窗口大小,确保浏览器控件填充父窗口 WVWindowParent1.UpdateSize; end; // 定时器事件,用于轮询 WebView2 初始化状态 procedure TForm1.Timer1Timer(Sender: TObject); begin // 先关闭定时器,避免重复触发 Timer1.Enabled := False; // 如果 WebView2 已初始化成功 if GlobalWebView2Loader.Initialized then // 创建浏览器控件,并指定父窗口句柄 WVBrowser1.CreateBrowser(WVWindowParent1.Handle) else // 如果仍未初始化,则再次启用定时器继续等待 Timer1.Enabled := True; end; procedure TForm1.Btn_FindInputClick(Sender: TObject); var script: wvstring; begin // JS 脚本:遍历所有 input,找到 value="文本框3" 的元素,返回 outerHTML script := 'var inputs = document.getElementsByTagName("input");' + 'var;' + 'for (var i=0; i<inputs.length; i++) {' + ' if (inputs[i].value === "文本框3") {' + ' inputs[i].value="新文本111";' + ' result = inputs[i].outerHTML;' + ' break;' + ' }' + '}' + 'result;'; // 执行 JS WVBrowser1.ExecuteScript(script); end; procedure TForm1.Btn_GetIdClick(Sender: TObject); var script: wvstring; begin // 获取指定 ID 的元素内容 script := 'document.getElementById("pagination").innerText = "新的内容 from Delphi";'; // Delphi 13 + WebView4Delphi 旧版本使用 Retrieve HTML 方式获取结果 WVBrowser1.ExecuteScript(script); end; // 程序初始化部分,全局 WebView2 加载器配置 initialization // 创建全局 WebView2 加载器对象 GlobalWebView2Loader := TWVLoader.Create(nil); // 设置 WebView2 用户数据缓存路径,防止使用默认路径 GlobalWebView2Loader.UserDataFolder := ExtractFileDir(Application.ExeName) + '\CustomCache'; // 启动 WebView2 初始化流程 GlobalWebView2Loader.StartWebView2; 关键点:
- 使用
GlobalWebView2Loader检查运行时状态。 Navigate方法传入目标 URL 字符串。- 避免在窗体未显示时调用
CreateBrowser。