Я использую DCEF3 на Delphi XE3.Различные обработчики файлов cookie для двух экземпляров хрома на одной форме
Задача: Создать различные хранилища файлов cookie для разных экземпляров TChromium.
Задача: Я создаю разные экземпляры ICefCookieManager для каждого экземпляра TChromium и его возвращения в событие GetCookieManager.
Пример кода:
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Chromium1: TChromium;
Chromium2: TChromium;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Chromium1GetCookieManager(Sender: TObject;
const browser: ICefBrowser; const mainUrl: ustring;
out Result: ICefCookieManager);
procedure Chromium2GetCookieManager(Sender: TObject;
const browser: ICefBrowser; const mainUrl: ustring;
out Result: ICefCookieManager);
private
{ Private declarations }
CookieManager: ICefCookieManager;
CookieManager2: ICefCookieManager;
public
{ Public declarations }
end;
var
Form1: TForm1;
procedure TForm1.FormCreate(Sender: TObject);
begin
CookieManager:=TCefCookieManagerRef.New('C:\Cookies\1');
CookieManager2:=TCefCookieManagerRef.New('C:\Cookies\2');
end;
procedure TForm1.Chromium1GetCookieManager(Sender: TObject;
const browser: ICefBrowser; const mainUrl: ustring;
out Result: ICefCookieManager);
begin
Result:=CookieManager;
end;
procedure TForm1.Chromium2GetCookieManager(Sender: TObject;
const browser: ICefBrowser; const mainUrl: ustring;
out Result: ICefCookieManager);
begin
Result:=CookieManager2;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Chromium1.Load('http://somesite.com');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Chromium2.Load('http://somesite.com');
end;
Если добавить к ShowMessage('First')
Chromium1GetCookieManager
событие, и ShowMessage('Second')
к Chromium2GetCookieManager
, всегда появляется сообщение «Первый» будет показано ниже, независимо от того, нажата ли я button1 или button2.
Другими словами Chromium1GetCookieManager вызывается для обоих экземпляров.
Это просто наблюдение. Установка свойства первого созданного экземпляра является единственной, которая будет использоваться для всех экземпляров. Если вы не добавите обработчик в OI и вы назначите событие через код для Chromium1, он также будет вызван для Chromium2. Если вы, однако, назначили его Chromium2, ни один из них не будет обработан. – bummi
Спасибо за доработку и ответ :) –