delphi – 如何为Chromium嵌入式浏览器的不同实例设置不同的cookie

我正在开发一个需要多个嵌入式实例的应用程序,并且每个实例都使用不同的身份验证详细信息登录到同一个外部站点.

我在Delphi中使用CEF(Chromium嵌入式框架),我有一个文件夹,我将cookie存储在我的浏览器的不同实例中,所以我在第一个单元中有这个代码

     procedure TForm2.Button1Click(Sender: TObject);
begin

  form33 := Tform3.Create(nil);

  form33.Show;
end;

当form33创建时

    procedure TForm3.FormCreate(Sender: TObject);
var
  CookieManager: ICefCookieManager;
  folder: string;

begin

  Randomize;

  Chromium1.SetBrowserID(Random(1244));

  folder := Randomtext(5);
  if DirectoryExists(folder) = False then
    MkDir(folder);

  CookieManager := TCefCookieManagerRef.Global;
  path := ExtractFilePath(Application.ExeName) + folder;

  CookieManager.SetStoragePath(path, true);

end;

问题是,当我打开两个或多个form33的实例时,我不能为每个窗体中的每个浏览器提供一个特定的cookie …

最佳答案 您应该通过TCefCookieManagerRef.New(Path)为每个实例创建一个新的管理器,并将返回的引用存储到表单的某个私有字段中.然后,您需要将存储的引用返回到OnGetCookieManager事件方法的Result参数:

type
  TForm1 = class(TForm)
    Chromium1: TChromium;
    procedure FormCreate(Sender: TObject);
    procedure Chromium1GetCookieManager(Sender: TObject;
      out Result: ICefCookieManager);
  private
    FCookieManager: ICefCookieManager2;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FCookieManager := TCefCookieManagerRef.New('C:\UniquePathToTheCookieStorage');
end;

procedure TForm1.Chromium1GetCookieManager(Sender: TObject;
  out Result: ICefCookieManager);
begin
  Result := FCookieManager;
end;
点赞