飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

C# GeckoFX内核浏览器清空Cookie的方法

Author:flymorn Source:flymorn
Categories:C#编程 PostTime:2011-6-17 3:27:19
正 文:
   Gecko是一款强大的浏览器内核,著名的Firefox浏览器就是基于 Gecko 核心的。有了 GeckoFX,我们就可以用C#开发一款和 firefox 同样内核的浏览器了。飘易使用的C#封装的 GeckoFX 版本为 GeckoFX 1.9.1.0。

    闲话少说,直入主题,如何清空 Gecko浏览器产生的 cookies 呢? 直接使用 Skybound 工作室编译好的 Skybound.Gecko.dll 是不行的,因为源码中根本没有封装cookie相关的操作函数。我们需要重新编译 GeckoFX 的源码。

    具体方法如下:

    打开 Xpcom.cs(红色的代码是新增加的):
//Initialize a static variable for the cookie manager
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 ,在里面添加该接口(红色代码为新增的):
[Guid("00000000-0000-0000-c000-000000000046"), ComImport]
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/
http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/
xulrunner介绍:https://developer.mozilla.org/cn/XULRunner
里面有好几个版本,因为 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/

补充:GeckoFX Readme英文说明
--------------------------------------
GeckoFX is a .NET wrapper around XULRunner, a runtime based on the same source
code as Firefox.  You can add the control to your windows forms app and use it much the
same way as System.Windows.Forms.WebBrowser.

Since GeckoFX is a wrapper, you need to have the XULRunner runtime somewhere on your
development system (and redistribute it with your application).  GeckoFX now works best
with XULRunner 1.9.1 (Firefox 3.5).

(1) Download XULRunner 1.9.1 from:

http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases/1.9.1.19/runtimes/xulrunner-1.9.1.19.en-US.win32.zip

(2) In your application startup code, call:

Skybound.Gecko.Xpcom.Initialize(xulrunnerPath);

where "xulrunnerPath" is the full path to the location where you extracted the "xulrunner" directory
(containing xul.dll, xpcom.dll, etc).

(3) OPTIONAL: Specify a profile directory by setting Xpcom.ProfileDirectory.

(4) OPTIONAL: There are some files included with XULRunner which GeckoFX doesn't need.  You may
safely delete them:

AccessibleMarshal.dll
dependentlibs.list
mozctl.dll
mozctlx.dll
java*.*
*.ini
*.txt
*.exe

(5) OPTIONAL:  XULRunner does not support about:config out of the box.  If you want to provide
access to this configuration page, copy the files from the "chrome" directory that came with
GeckoFX into the "chrome" directory in your XULRunner path.

The files that need to be copied are "geckofx.jar" and "geckofx.manifest".
--------------------------------------
作者:flymorn
来源:flymorn
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:利用Youtube视频引导网盘下载快速赚钱的思路!
下一篇:FireFox下用javascript模拟点击超链接的方法
4条评论 “C# GeckoFX内核浏览器清空Cookie的方法”
2011-6-19 0:10:23
哇是这样的呀。我不会,一直残留在电脑里。
2 小晕
2011-6-30 17:36:02
GeckoFX的缓存每次打开都会被自动清空,有什么解决办法么
3 y-ing
2011-10-13 15:13:55
请问博主,能不能给不同实例设置不同代理呀?以下的代码好像只能设全局
GeckoPreferences.User["network.proxy.type"] = 1;
GeckoPreferences.User["network.proxy.http"] = "218.24.154.56";
GeckoPreferences.User["network.proxy.http_port"] = 8909;
4 maji921
2013-12-9 21:49:05
请问博主,能改变页面当前的Cookie内容不?我指的是修个一个值或添加一条Cookie记录。
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2010 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有 渝ICP备07006361号