2014-11-11 2 views
1

Я использую 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 вызывается для обоих экземпляров.

+0

Это просто наблюдение. Установка свойства первого созданного экземпляра является единственной, которая будет использоваться для всех экземпляров. Если вы не добавите обработчик в OI и вы назначите событие через код для Chromium1, он также будет вызван для Chromium2. Если вы, однако, назначили его Chromium2, ни один из них не будет обработан. – bummi

+0

Спасибо за доработку и ответ :) –

ответ

1

Проблема решена, спасибо всем.

Как решить проблему?
Просто отключите переменную cefsingleprocess в файле project1.dpr.
Пример:

program Project1; 

uses 
    Forms, 
    cefvcl, 
    ceflib, 
    Unit1 in 'Unit1.pas' {Form1}; 

{$R *.res} 

begin 
    CefSingleProcess := False;//this what i'm talking about 
    Application.Initialize; 
    Application.CreateForm(TForm1, Form1); 
    Application.Run; 
end. 
+0

Не могли бы вы помочь мне с этим вопросом? Эта задача намного сложнее, чем та, которую я пытаюсь достичь, это должно быть легко для вас: http://stackoverflow.com/questions/34615234/tchromium-how-to-keep-session-alive?lq=1 – delphirules

 Смежные вопросы

  • Нет связанных вопросов^_^