我用TChromium创建了一个浏览器.
TChromium是动态创建的.
Facebook访问(登录)
在该过程结束时,该组件被销毁.
再次创建组件时会发生此问题
他继续上一次会议(登录).
我需要清理所有缓存和cookie. (强制注销)
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)
我该怎么办?
解决方法
DCEF1:
要删除DCEF1包装器中的cookie,可以使用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.访问所有这些并在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;