我已经搜索了很多关于使用 JavaScript 删除所有或特定 cookie 的信息。
有很多帖子说这不可能100%,或者你不能用HttpOnly flag删除cookie。 。那么问题是Cookies Manager+如何Firefox 扩展可以用 JavaScript 删除 cookie 吗?或者怎么Delete All Cookies From JavaScript Chrome 扩展允许程序员通过向其扩展发送 postMessage
来删除 cookie?
我正在开发 Firefox 扩展,需要从网站删除一些 cookie。
如何删除 Firefox 扩展程序中的 cookie?
最佳答案
如Alexander O'Mara在评论中提到,Chrome 和 Firefox JavaScript 扩展在比网页中包含的 JavaScript 具有更高权限的上下文中运行。在较高的权限级别,他们可以更改 cookie。您的困惑可能是您正在阅读的网页讨论了从网页运行的 JavaScript 的可能性。
虽然我还没有测试它,但以下代码似乎可以实现您想要的功能:
var {Cc, Ci} = require("chrome");
function DeleteAllCookiesForDomain( domain ) {
var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager);
var iter = cookieManager.enumerator;
var cookie_count = 0;
while (iter.hasMoreElements()) {
var cookie = iter.getNext();
if (cookie instanceof Ci.nsICookie) {
if (domain.indexOf(cookie.host.toUpperCase()) != -1) {
cookieManager.remove(cookie.host, cookie.name, cookie.path, false);
cookie_count++;
}
}
}
return cookie_count;
};
上面的代码是从 How do I delete cross site cookies with Firefox 22+ extension? 中找到的代码稍作修改的。 .
但是,上面的代码效率很低,因为它会迭代所有 cookie,而不仅仅是来自您有兴趣删除的域的 cookie。以下使用 nsICookieManager2仅迭代您要删除的域的那些 cookie 的接口(interface):
//For SDK
var {Cc, Ci} = require("chrome");
var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
//*/
/*//For restartless/bootstrap/overlay
Components.utils.import("resource://gre/modules/Services.jsm");
var cookieManager = Services.cookies;
//*/
function DeleteAllCookiesForDomain( domain ) {
var iter = cookieManager.getCookiesFromHost(domain);
var cookie_count = 0;
while (iter.hasMoreElements()) {
var cookie = iter.getNext();
if (cookie instanceof Ci.nsICookie) {
cookieManager.remove(cookie.host, cookie.name, cookie.path, false);
cookie_count++;
}
}
return cookie_count;
};
关于javascript - 在 Firefox 扩展中使用 JavaScript 删除 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35142884/