C# GeckoFX内核浏览器如何清空Cookie!!
闲话少说,直入主题,如何清空 Gecko浏览器产生的 cookies 呢? 直接使用 Skybound 工作室编译好的 Skybound.Gecko.dll 是不行的,因为源码中根本没有封装cookie相关的操作函数。我们需要重新编译 GeckoFX 的源码。
具体方法如下:
打开 Xpcom.cs(红色的代码是新增加的):
static nsICookieManager CookieMan;
public static void Initialize()
{
Initialize(null);
InitializeExtras();
}
static void InitializeExtras()
{
//Initialize the cookie manager
CookieMan = Xpcom.GetService<nsICookieManager>("@mozilla.org/cookiemanager;1");
CookieMan = Xpcom.QueryInterface<nsICookieManager>(CookieMan);
}
public static void Initialize(string binDirectory)
{
.....
InitializeExtras();
}
public static void DeleteAllCookies()
{
CookieMan.removeAll();
}
修改好 Xpcom.cs 后重新编译生成.dll库文件,然后程序里调用新编译过的 Skybound.Gecko.dll库文件。如何调用进行清空cookie?直接在程序中需要清空cookie的地方使用语句:
Xpcom.DeleteAllCookies();
就可以了。
在编译dll的过程中,可能发生的错误以及解决方法:
1,nsICookieManager 错误:“找不到类型或命名空间名称“nsICookieManager”(是否缺少 using 指令或程序集引用?)”。
这是由于在接口文件中没有定义 nsICookieManager 接口导致。解决方法:打开 nsInterfaces.cs ,在里面添加该接口(红色代码为新增的):
public interface nsISupports
{
object QueryInterface(ref Guid iid);
int AddRef();
int Release();
}
[Guid("AAAB6710-0F2C-11d5-A53B-0010A401EB10"), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface nsICookieManager
{
void removeAll();
void remove(string aDomain, string aName, string aPath, bool aBlocked);
}
2,nsIDOMNSElement 错误:“找不到类型或命名空间名称“nsIDOMNSElement”(是否缺少 using 指令或程序集引用?)”
这是由于debug的版本不对,解决方法:工程属性-->生成-->配置-->选择 Debug 1.9 或 Release 即可。
这里也有一篇其他网友写的“曲线救国”的清空cookies的方式:geckofx使用之初步探索:cookies.sqlite,飘易不推荐。
使用 geckofx 控件需要 xulrunner 运行环境,xulrunner下载地址:http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/,里面有好几个版本,因为 GecKoFX readme 里说 GeckoFX now works best with XULRunner 1.9.1 (Firefox 3.5),所以飘易下载的是 XULRunner 1.9.1.19 版本。
Geckofx论坛:http://geckofx.org/
Google code:http://code.google.com/p/geckofx/
原始地址:《C# GeckoFX内核浏览器清空Cookie的方法》- http://www.piaoyi.org/c-sharp/c-geckofx-clear-cookie.html