Как отметил в комментарии Александр О'Мара, расширения 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