在Firefox扩展中按域/名访问特定cookie

Man*_*tok 5 javascript cookies firefox-addon firefox-addon-sdk

我正在开发Firefox扩展,需要从特定域访问特定的cookie.我有这个代码来获取所有域的所有cookie,我如何只请求我正在寻找的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

总而言之,我能够使用上面的代码找到我正在寻找的cookie,但我不想迭代所有域中的所有cookie.

Wla*_*ant 6

您可以使用nsICookieManager2接口(原始nsICookieManager接口已冻结且无法更改,这就是创建此扩展版本的原因):

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

注意:在Gecko 2.0(Firefox 4)中删除了冻结接口的概念.从那时起,一些类似于nsICookieManager/ nsICookieManager2已经统一的接口- 因此在未来的Firefox版本中nsICookieManager2也可能会消失,所有功能都将在nsICookieManager那时公开.