2012-02-28 57 views
5

我正在开发Firefox扩展,需要访问特定域中的特定cookie。我有这个代码取得所有域的所有cookie,我如何只请求我正在寻找的cookie。通过Firefox扩展中的域名/名称访问特定的Cookie

var {Cc, Ci} = require("chrome"); 

var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager); 

var count = cookieManager.enumerator; 

while (count.hasMoreElements()){ 
    var cookie = count.getNext(); 
    if (cookie instanceof Ci.nsICookie){ 
     console.log(cookie.host); 
     console.log(cookie.name); 
     console.log(cookie.value); 
    } 
} 

综上所述,我能找到我要找上面的代码中的Cookie,但我不希望有通过所有来自所有域的cookie进行迭代。

回答

6

可以使用nsICookieManager2 interface(原nsICookieManager接口被冻结,无法改变这就是为什么这种扩展版本创建):

var cookieManager = Cc["@mozilla.org/cookiemanager;1"] 
         .getService(Ci.nsICookieManager2); 
var count = cookieManager.getCookiesFromHost("example.com"); 

注:冻结的接口的概念在壁虎2.0下降(Firefox 4)。从那时起,一些与nsICookieManager/nsICookieManager2类似的界面已经统一 - 所以在未来的Firefox版本nsICookieManager2也可能会消失,那么所有功能将在nsICookieManager上曝光。

+0

你是传奇! – Manatok 2012-02-28 07:51:58

+0

您能否提供一个如何从'getCookiesFromHost'返回的迭代器获取cookie的例子? – MeLight 2013-08-12 08:25:32

+1

一个完整的例子可以在这里找到:https://developer.mozilla.org/en-US/docs/Code_snippets/Cookies – MeLight 2013-08-12 08:41:09