如何使用Firefox Add-on SDK设置自定义cookie(使用Firefox Add-on SDK中的服务)

时间:2015-12-16 05:57:51

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

我正在创建一个Firefox附加SDK扩展,可以在Firefox v41上设置自定义Cookie(带有namevalue属性的两个Cookie), jpm

基本上,如果我打开加载项的Panel()并单击set,则应设置cookie值。在刷新时,我应该能够在我的开发者控制台上看到它们,我打开了这个选项卡。并且,在重置时,应将其删除。

我尝试在Mozilla开发者网站上的附加组件Code snippets -> Cookies修改代码段:

Services.cookies.add("http://www.google.com/", "/", "test", "value");

我面临的问题是服务模块。当我在调试模式下运行扩展时,会抛出ReferenceError,表示未定义Services

我无法找到另一种永久设置Cookie的方法。使用document.cookie只会为面板设置cookie值,而这不是我要找的。

当我在某处读到Firefox的附加框架与Google Chrome的Cookie API兼容时,我也试过Chrome的方式。

如果您需要有关我所面临问题的更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

在Firefox附加组件SDK中,您可以使用以下内容访问Services

var { Services }  = require("resource://gre/modules/Services.jsm");

但是,使用Services.cookies.add()是错误的,因为您没有向该方法传递足够的参数。这是有用的东西:

var { Services }  = require("resource://gre/modules/Services.jsm");
let is_secure = false;
let is_http_only = false;
let is_session = false;
let expiry_date = Math.floor(Date.now()/1000 + 3600*24); //Time in seconds 1 day from now.
Services.cookies.add(".host.example.com", "/cookie-path", "cookie_name", "cookie_value",
                     is_secure, is_http_only, is_session, expiry_date);

这将导致cookie看起来像:

Example cookie panel

要使用Services.cookies (nsICookieManager2)的某些方法,您还需要Chrome Authority。例如,要通过cookie进行枚举,您可以这样做:

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