Удаление файлов cookie с помощью JavaScript в расширении Firefox

Я много искал, чтобы удалить все или определенный файл cookie с помощью JavaScript. Есть много сообщений, в которых говорится, что это невозможно на 100%, или вы не можете удалить файлы cookie с флагом HttpOnly< /а>. Тогда возникает вопрос, как расширение Cookies Manager+ Firefox можно удалить куки с помощью JavaScript? Или как Удалить все файлы cookie из JavaScript Расширение Chrome позволяет программистам удалять файлы cookie, отправляя postMessage на его расширение?

Я разрабатываю расширение для Firefox и мне нужно удалить некоторые файлы cookie с веб-сайта.

Как удалить файлы cookie в расширении Firefox?


person nAviD    schedule 02.02.2016    source источник
comment
Расширения Firefox и Chrome работают в другой среде JavaScript с более высокими привилегиями. Ограничения, наложенные на веб-контент, не обязательно применимы. Вот как.   -  person Alexander O'Mara    schedule 02.02.2016
comment
Вы смотрели документацию по расширениям Firefox?   -  person epascarello    schedule 02.02.2016
comment
Учитывая, что вы нашли примеры расширений, которые выполняют то, что вас беспокоит, смотрели ли вы на код, который они используют для выполнения задачи? Это должно прояснить, как это делается.   -  person Makyen♦    schedule 02.02.2016
comment
Связанный: Как удалить межсайтовые файлы cookie с помощью расширение Firefox 22+?. Этот вопрос содержит то, что кажется полностью функциональным кодом для удаления файлов cookie.   -  person Makyen♦    schedule 02.02.2016


Ответы (2)


Как отметил в комментарии Александр О'Мара, расширения 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, а не только файлы из домена, который вы хотите удалить. В следующем примере используется интерфейс 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;
};
person Makyen♦    schedule 02.02.2016

Просто используйте browsingData API. Я нашел он очень дружелюбный и простой в использовании

В вашем фоновом скрипте

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

Примечание. Я использовал разрешения browserData и storage в файле mainfest.json расширения.

person Accountant م    schedule 14.01.2021