2012-09-04 109 views
6

我用TChromium创建了一个浏览器。 TChromium是动态创建的。 Facebook访问(登录) 在该过程结束时,组件被销毁。 再次创建组件时发生问题 他继续上一个会话(登录)。 我需要清理所有缓存和Cookie。 (强制注销)如何清除嵌入式Chromium浏览器的缓存和Cookie?

下面的代码创建的组件:

var 
   Chromium: TChromium; 
begin 
   try 
     Chromium := TChromium.Create(nil); 
     Chromium.SetParentComponent(Form1); 
     Chromium.Align := alClient; 
     chromium.Browser.MainFrame.LoadUrl('www.facebook.com'); 

我破坏,并释放内存这样的:

FreeAndNil(Chromium) 

我该怎么办?

+0

ApplicationCacheDisabled:=真实,PageCacheDisabled =真没有什么好这些选项 –

回答

5

DCEF1

删除Cookie在DCEF1包装有一个在ICefCookieManager管理器界面的DeleteCookies功能。不过,我已经试过下面的代码删除所有cookie,但它始终没对我说:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    CookieManager: ICefCookieManager; 
begin 
    CookieManager := TCefCookieManagerRef.GetGlobalManager; 
    if not CookieManager.DeleteCookies('', '') then 
    ShowMessage('DeleteCookies failed!'); 
end; 

幸运的是,还有另外一个选择,删除使用此cookie管理器的cookie。访问所有这些参数,并在访问者函数中将deleteCookie输出参数赋值为True。小心越来越cookie管理器,它创造了第一次您浏览的地方(在GetGlobalManager类函数是不安全的,这不是正确的意想不到的结果处理),所以要确保导航后,您将使用此代码:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    CookieManager: ICefCookieManager; 
begin 
    CookieManager := TCefCookieManagerRef.GetGlobalManager; 
    CookieManager.VisitAllCookiesProc(
    function(const name, value, domain, path: ustring; secure, httponly, 
     hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; 
     count, total: Integer; out deleteCookie: Boolean): Boolean 
    begin 
     deleteCookie := True; 
     ShowMessage('A cookie from domain ' + domain + ' will be unmercifully ' + 
     'deleted!'); 
    end 
); 
end; 

DCEF3

在DCEF3包装中,您可以使用以下内容。积分Eric Santos

type 
    CefTask = class(TCefTaskOwn) 
    procedure Execute; override; 
    end; 

procedure CefTask.Execute; 
var 
    CookieManager: ICefCookieManager; 
begin 
    CookieManager := TCefCookieManagerRef.Global; 
    CookieManager.DeleteCookies('', ''); 
end; 

procedure ClearCookies; 
var 
    Task: CefTask; 
begin 
    Task := CefTask.Create; 
    CefPostTask(TID_IO, Task); 
end; 
+0

你好@TLama!你使用什么版本的dcef? –

+0

嗨,我正在使用来自SVN最新的版本之一147。 – TLama

+0

你能通过链接下载吗?谢谢 –

1

TLama您的帮助对我的项目具有决定性意义。我很感谢分享你的经验。

解决我的问题与此代码:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    CookieManager: ICefCookieManager; 
begin 
    CookieManager := TCefCookieManagerRef.GetGlobalManager; 
    CookieManager.VisitAllCookiesProc(
    function(const name, value, domain, path: ustring; secure, httponly, 
     hasExpires: Boolean; const creation, lastAccess, expires: TDateTime; 
     count, total: Integer; out deleteCookie: Boolean): Boolean 
    begin 
     deleteCookie := True; 
     ShowMessage('A cookie from domain ' + domain + ' will be unmercifully ' + 
     'deleted!'); 
    end 
); 
end; 

拥抱

相关问题