从cookie获取主机

jos*_*gna 3 firefox firefox-addon firefox-addon-sdk

我正在使用Firefox的Addon SDK(v1.9)进行构建和扩展.

我的应用程序应该删除cookie,因为它们是根据匹配URI的数据库添加(或更改)的.

我通过向'cookie-changed'添加观察者并实现nsICookie以识别匹配的cookie和nsICookieManager以在找到匹配时删除cookie 来完成此任务.

问题

我需要知道每个cookie添加/更改的网站(URL).

Wla*_*ant 5

不幸的是,当cookie管理器发送cookie-changed信息已经丢失的通知时 - cookie管理器只知道添加cookie的主机(如果使用了domain参数,它可能不是设置cookie的页面的主机).甚至可能首先没有URL,例如,如果cookie是由扩展名设置的.

您可以做的是为http-on-examine-response通知注册观察者.您可以查看Set-Cookie频道的标题以及频道URL,以便cookie-changed稍后发送通知时您将知道哪个网站负责.像这样的东西:

var observer = require("observer-service");
observer.add("http-on-examine-response", function(subject, data)
{
  subject.QueryInterface(Ci.nsIHttpChannel);
  var cookieNames = [];

  // There can be more than one Set-Cookie header, cannot use getResponseHeader
  subject.visitResponseHeaders(function(header, value)
  {
    if (header.toLowerCase() == "set-cookie")
    {
      var match = /^([^\s=]+)=/.exec(value);
      if (match)
        cookieNames.push(match[1]);
    }
  });

  if (cookieNames.length)
  {
    var url = channel.URI.spec;

    // Remember that this url set the cookies or just clear the header
    if (!isAllowedToSetCookies(url, cookieNames))
      channel.setResponseHeader("Set-Cookie", "", false);
  }
});
Run Code Online (Sandbox Code Playgroud)

注意:此代码尚未经过测试.

文档:观察者通知,nsIHttpChannel