我正在使用Add-on SDK开发Mozilla Firefox扩展。在每个选项卡更改事件中,我想要读取在另一个选项卡中打开的指定主机的cookie。我达到了标签更改的目的,但我正在尝试找出在最近激活的标签页中获取指定主机的Cookie的方法。
var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
// want to get cookies here.
});
答案 0 :(得分:2)
好吧,在tabs.on('activate')
事件处理程序中,您拥有tab
。 tab
对象具有属性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)"。