【问题标题】:How to set custom cookies using Firefox Add-on SDK (using Services from Firefox Add-on SDK)如何使用 Firefox Add-on SDK 设置自定义 cookie(使用 Firefox Add-on SDK 中的服务)
【发布时间】:2016-07-18 13:07:30
【问题描述】:

我正在创建一个 Firefox Add-on SDK 扩展,它将在 Firefox v41 上使用 jpm 设置自定义 cookie(两个具有 namevalue 属性的 cookie)。

基本上,如果我打开插件的Panel() 并单击设置,则应该设置 cookie 值。刷新时,我应该能够在我的开发人员控制台上看到它们,我在哪个选项卡中打开。并且,在重置时,它们应该被移除。

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

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

我面临的问题是服务模块。当我在调试模式下运行我的扩展时,它会抛出 ReferenceErrorServices 没有定义。

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

当我在某处读到 Firefox 的附加框架与 Google Chrome 的 Cookie API 兼容时,我也尝试了 Chrome 的做法。

如果您需要有关我所面临问题的更多信息,请告诉我。

【问题讨论】:

  • “它会抛出 ReferenceError 说服务未定义。” - 当某些东西丢失时,下一步是什么?请记住,您正在查看的页面称为 “Code sn-ps > Cookies” 而不是 “完整和独立的示例,包括电池 > Cookies”
  • 我的错,我忘了提到我无法找到服务模块来清除 ReferenceError。任何帮助将不胜感激..this 位置的导入也不起作用..
  • “在这个位置的导入也不起作用” - 你遇到了什么错误?

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


【解决方案1】:

在 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");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多