1

我已经搜索了很多使用 JavaScript 删除所有或特定 cookie 的内容。有很多帖子说它不可能 100%,或者你不能删除带有HttpOnly 标志的 cookie 。那么问题来了,Cookies Manager+ Firefox 扩展如何使用 JavaScript 删除 cookie?或者,Delete All Cookies From JavaScript Chrome 扩展程序如何让程序员通过发送postMessage到他的扩展程序来删除 cookie?

我正在开发一个 Firefox 扩展程序,需要从网站上删除一些 cookie。

如何删除 Firefox 扩展程序中的 cookie?

4

2 回答 2

2

正如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;
};

上面的代码是从如何删除带有 Firefox 22+ 扩展的跨站点 cookie?.

但是,上面的代码效率很低,因为它遍历了所有 cookie,而不仅仅是您有兴趣删除的域中的那些。以下使用nsICookieManager2接口仅对您要删除的域的那些 cookie 进行迭代:

//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;
};
于 2016-02-02T04:33:37.883 回答
1

只需使用浏览数据 API,我发现它非常友好且易于使用

在您的后台脚本中

var removalOptions = {hostnames: ['example.com', 'www.example.com']};
var dataTypeSet = {cookies: true}; // , indexedDB: true, localStorage:true
browser.browsingData.remove(removalOptions , dataTypeSet);

注意:我在扩展的 mainfest.json 文件中使用了“browsingData”和“storage”权限

于 2021-01-14T03:50:58.057 回答