我正在创建一个Firefox附加SDK扩展,可以在Firefox v41上设置自定义Cookie(带有name
和value
属性的两个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的方式。
如果您需要有关我所面临问题的更多信息,请与我们联系。
答案 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看起来像:
要使用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");
}