我使用TChromium创建了一个浏览器。 TChromium是动态创建的。 Facebook访问(登录) 在该过程结束时,该组件被销毁。 再次创建组件时会发生此问题 他继续上一次会议(登录)。 我需要清理所有缓存和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 :(得分:5)
<强> DCEF1 强>:
要删除DCEF1包装中的cookie,DeleteCookies
管理器界面中有ICefCookieManager
函数。但是,我已经尝试使用以下代码删除所有cookie,但它总是对我失败:
procedure TForm1.Button1Click(Sender: TObject);
var
CookieManager: ICefCookieManager;
begin
CookieManager := TCefCookieManagerRef.GetGlobalManager;
if not CookieManager.DeleteCookies('', '') then
ShowMessage('DeleteCookies failed!');
end;
幸运的是,还有另一种选择,可以使用此cookie管理器删除cookie。访问所有这些并在visitor函数中将True指定为deleteCookie
输出参数。小心获取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;
答案 1 :(得分: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;
拥抱