jos*_*gna 3 firefox firefox-addon firefox-addon-sdk
我正在使用Firefox的Addon SDK(v1.9)进行构建和扩展.
我的应用程序应该删除cookie,因为它们是根据匹配URI的数据库添加(或更改)的.
我通过向'cookie-changed'添加观察者并实现nsICookie以识别匹配的cookie和nsICookieManager以在找到匹配时删除cookie 来完成此任务.
问题
我需要知道每个cookie添加/更改的网站(URL).
不幸的是,当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)
注意:此代码尚未经过测试.