You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi中自定义WebView2组件的userDataFolder存储路径

Delphi 10.2 Berlin 下WebView2自定义UserDataFolder路径解决方案

方案一:升级WinSOFT WebView组件到v3.3及以上版本

这是成本最低的解决方案,v3.3版本已官方支持DataFolder属性,直接在初始化前赋值即可:

  • 组件升级到官方发布的v3.3最新版本
  • 在WebView组件初始化前(推荐写在窗体的OnCreate事件中),指定DataFolder为有权限的路径,参考代码:
uses
  System.IOUtils, Winapi.ShlObj;

procedure TForm1.FormCreate(Sender: TObject);
var
  AppDataPath: string;
begin
  // 获取当前用户的LOCALAPPDATA目录,普通用户默认有读写权限
  AppDataPath := TPath.GetLibraryPath(CSIDL_LOCAL_APPDATA) + '\你的程序名称\WebView2Data';
  // 确保目录存在
  if not DirectoryExists(AppDataPath) then
    ForceDirectories(AppDataPath);
  // 给WebView组件指定数据目录
  EdgeBrowser1.DataFolder := AppDataPath;
  // 后续再执行导航等操作
  EdgeBrowser1.Navigate('https://你的目标地址');
end;

方案二:无法升级、仅能使用v3.1版本的处理方案

v3.1版本无内置DataFolder属性,需要手动调用WebView2底层API指定数据目录:

  • 首先清空设计期WebView组件的URL属性,禁止组件自动初始化
  • 在程序启动阶段手动调用CreateCoreWebView2EnvironmentWithOptions接口,传入自定义的userDataFolder参数,再将创建好的环境绑定到WebView组件实例,参考核心代码:
procedure TForm1.InitWebView2;
var
  Env: ICoreWebView2Environment;
  UserDataFolder: string;
begin
  UserDataFolder := TPath.GetLibraryPath(CSIDL_LOCAL_APPDATA) + '\你的程序名称\WebView2Data';
  if not DirectoryExists(UserDataFolder) then
    ForceDirectories(UserDataFolder);
  // 手动创建WebView2环境,第三个参数即为自定义数据目录
  CreateCoreWebView2EnvironmentWithOptions(nil, PWideChar(UserDataFolder), nil,
    Callback<TCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler>.Create(
    function(const environment: ICoreWebView2Environment; result: HResult): HResult stdcall
    begin
      Result := S_OK;
      if Succeeded(result) then
      begin
        Env := environment;
        // 将环境绑定到当前WebView组件的控制器
        Env.CreateCoreWebView2Controller(Handle,
          Callback<TCoreWebView2CreateCoreWebView2ControllerCompletedHandler>.Create(
          function(const controller: ICoreWebView2Controller; result: HResult): HResult stdcall
          begin
            Result := S_OK;
            if Succeeded(result) then
            begin
              // 绑定控制器到WebView组件实例
              EdgeBrowser1.DefaultInterfaceController := controller;
              // 调整WebView显示大小
              controller.Bounds := ClientRect;
              controller.IsVisible := True;
              // 执行导航
              controller.CoreWebView2.Navigate('https://你的目标地址');
            end;
          end));
      end;
    end));
end;

注意事项

  • 禁止将UserDataFolder设置到Program Files、Windows等系统级受限目录,优先选择%LOCALAPPDATA%、%APPDATA%下的程序专属子目录
  • 多用户场景下必须为每个用户分配独立的UserDataFolder,不要使用公共目录避免权限冲突和数据泄露
  • 所有路径配置必须在WebView2初始化完成前设置,初始化完成后修改路径不生效

内容的提问来源于stack exchange,提问作者Walter Schrabmair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:45:03