使用Firefox Add-on SDK读取指定主机的cookie

时间:2016-09-09 05:36:46

标签: javascript cookies firefox-addon firefox-addon-sdk

我正在使用Add-on SDK开发Mozilla Firefox扩展。在每个选项卡更改事件中,我想要读取在另一个选项卡中打开的指定主机的cookie。我达到了标签更改的目的,但我正在尝试找出在最近激活的标签页中获取指定主机的Cookie的方法。

var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
    // want to get cookies here. 
});

1 个答案:

答案 0 :(得分:2)

好吧,在tabs.on('activate')事件处理程序中,您拥有tabtab对象具有属性url,您可以从中获取主机。拥有主机后,您可以获取该主机的cookie。你还没有说明你想用它们做什么。所以,这只是一种枚举它们的方法。

要使用Services.cookies (nsICookieManager2)的某些方法,您还需要Chrome Authority

var domainToUse = 'google.com';
var { Services }  = require("resource://gre/modules/Services.jsm");
var { Cc, Cu, Ci} = require("chrome");
let cookieEnumerator = Services.cookies.getCookiesFromHost(domainToUse);
while (cookieEnumerator.hasMoreElements()) {
  let cookie = cookieEnumerator.getNext().QueryInterface(Ci.nsICookie2); 
  console.log(cookie.host + ";" + cookie.name + "=" + cookie.value + "\n");
}

更新版本的Firefox:
注意:至少通过Firefox 50.0a2(目前是Firefox Developer Edition),有必要对getCookiesFromHost()使用略有不同的调用来获取cookieEnumerator。如果没有更改,对getCookiesFromHost()的调用将在浏览器控制台中显示一条警告消息,指示您访问nsICookieManager2 MDN documentation page,其中没有关于警告的更新信息,或有关更改的任何文档。我必须查看源代码以确定需要什么。似乎需要传递当前内容document。但是,从一个看起来不合理的后台脚本。使用它的另一种方法是传入一个空对象{}。因此,该行改为:

let cookieEnumerator = Services.cookies.getCookiesFromHost(domainToUse,{});

应该用于传入将要检索的originAttributes个Cookie。"

上述代码稍微修改了我的answer to "How to set custom cookies using Firefox Add-on SDK (using Services from Firefox Add-on SDK)"