在Firefox扩展中使用JavaScript删除Cookie [英] Deleting cookies with JavaScript in Firefox extension

查看:375
本文介绍了在Firefox扩展中使用JavaScript删除Cookie的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我搜索了很多内容,要删除全部或使用JavaScript的特定Cookie。
有很多帖子说它不可能100%,或者您不能删除 HttpOnly标志。然后问题是 Cookie管理器+ Firefox扩展程序可以使用JavaScript删除Cookie?或者从JavaScript删除所有Cookie Chrome扩展程序允许程序员通过向其扩展程序发送 postMessage 来删除Cookie?

I have searched a lot for deleting all or a specific cookie with JavaScript. There are lots of posts that say its not possible 100%, or you can not delete cookies with HttpOnly flag. Then the question is how the Cookies Manager+ Firefox extension can delete cookies with JavaScript? Or how the Delete All Cookies From JavaScript Chrome extension lets programmers delete cookies by sending postMessage to his extension?

并需要从网站删除一些cookie。

I am developing a Firefox extension and need to delete some cookies from a website.

如何在Firefox扩展程序中删除Cookie?

推荐答案

由于 Alexander O'Mara 在评论中提到,Chrome和Firefox JavaScript扩展插件一个具有比包含在网页上的JavaScript更高的特权的上下文。在更高的权限级别,他们被允许更改cookie。您的困惑可能是您正在阅读网页,讨论从网页运行的JavaScript的可能性。

As Alexander O'Mara mentioned in a comment, Chrome and Firefox JavaScript extensions run in a context that has higher privileges than JavaScript that is included on webpages. At that higher privilege level they are permitted to make changes to cookies. Your confusion probably is that you are reading webpages that discuss what is possible for JavaScript that is running from a webpage.

虽然我还没有测试它,下面的代码显示做你想要的:

While I have not tested it, the following code appears to do what you want:

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?

但是,上述代码是无效的,因为它遍历所有的cookies,而不只是那些来自您感兴趣删除的域。以下代码使用 nsICookieManager2 界面只对您要删除的域的那些Cookie进行迭代:

However, the above code is inefficient as it iterates over all cookies, not just those from the domain you are interested in deleting. The following uses the nsICookieManager2 interface to iterate only over those cookies for the domain which you are deleting:

//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;
};

这篇关于在Firefox扩展中使用JavaScript删除Cookie的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆