使用 Firefox Add-on SDK 读取指定主机的 cookie
Read cookies of specified host using Firefox Add-on SDK
我正在使用附加 SDK 开发 Mozilla Firefox 扩展。在每个选项卡更改事件中,我想读取在另一个选项卡中打开的指定主机的 cookie。我达到了标签更改,但我试图找出在最近激活的标签中获取指定主机的 cookie 的方法。
var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
// want to get cookies here.
});
好吧,来自 tabs.on('activate')
event handler, you have the tab
。 tab
对象有一个 属性 url
,您可以从中获取主机。拥有主机后,您可以获得该主机的 cookie。你还没有说明你想用它们做什么。所以,这里只是枚举它们的一种方法。
为了使用Services.cookies (nsICookieManager2) you will also need to require 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,{});
应该是为了传入"the originAttributes
of cookies that would be be retrieved."
上面的代码是从我的 answer to "How to set custom cookies using Firefox Add-on SDK (using Services from Firefox Add-on SDK)".
稍微修改而来的
我正在使用附加 SDK 开发 Mozilla Firefox 扩展。在每个选项卡更改事件中,我想读取在另一个选项卡中打开的指定主机的 cookie。我达到了标签更改,但我试图找出在最近激活的标签中获取指定主机的 cookie 的方法。
var tabs = require("sdk/tabs");
tabs.on('activate', function(tab) {
// want to get cookies here.
});
好吧,来自 tabs.on('activate')
event handler, you have the tab
。 tab
对象有一个 属性 url
,您可以从中获取主机。拥有主机后,您可以获得该主机的 cookie。你还没有说明你想用它们做什么。所以,这里只是枚举它们的一种方法。
为了使用Services.cookies (nsICookieManager2) you will also need to require 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,{});
应该是为了传入"the originAttributes
of cookies that would be be retrieved."
上面的代码是从我的 answer to "How to set custom cookies using Firefox Add-on SDK (using Services from Firefox Add-on SDK)".
稍微修改而来的