javascript - 在 Firefox 扩展中使用 JavaScript 删除 cookie

标签 javascript cookies firefox-addon httponly cookie-httponly

我已经搜索了很多关于使用 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/

相关文章:

javascript - 如何从 Firefox 附加组件将 javascript 注入(inject)页面并运行它?

javascript - 如何在输入类型日期字段中自动选择日期

javascript - CSS 中奇怪的 z-index 行为

javascript - obj !== obj 什么时候可以为真?

javascript - 如何使用Java设置和读取cookie值

javascript - 如何访问contentEditable元素的nsIEditor?

Firefox 3 中的 JavaScript 调试?

javascript - 如何合并两个包含对象的数组

javascript - 如果 cookie 大小超出浏览器限制,浏览器会抛出一些错误吗?

c# - ASP.NET Session - 电子商务应用程序的使用或不使用以及最佳实践