Существуют серьезные ограничения на то, что Greasemonkey может удалить. Другие инструменты могут быть лучше для того, что вы хотите, см. Ниже. Но, если все эти условия выполнены:
- Файлы cookie, которые вы хотите удалить, находятся на домене текущей страницы.
- Они не "Безопасные куки" .
- Вы просматриваете возможные пути, включая
/
, пустой путь и т. Д.
- После загрузки страницы javascript не устанавливает файлы cookie.
- То, что вы отслеживаете, действительно является «cookie». Многие веб-сайты используют различные другие методы, включая LSO, локальное хранилище и т. Д.
ТО , следующий код удалит их:
//--- Loop through cookies and delete them.
var cookieList = document.cookie.split (/;\s*/);
for (var J = cookieList.length - 1; J >= 0; --J) {
var cookieName = cookieList[J].replace (/\s*(\w+)=.+$/, "$1");
eraseCookie (cookieName);
}
Где eraseCookie()
:
(Обратите внимание, что eraseCookie получает гораздо больше файлов cookie, пытаясь использовать все возможные пути и наиболее вероятные субдомены.)
function eraseCookie (cookieName) {
//--- ONE-TIME INITS:
//--- Set possible domains. Omits some rare edge cases.?.
var domain = document.domain;
var domain2 = document.domain.replace (/^www\./, "");
var domain3 = document.domain.replace (/^(\w+\.)+?(\w+\.\w+)$/, "$2");;
//--- Get possible paths for the current page:
var pathNodes = location.pathname.split ("/").map ( function (pathWord) {
return '/' + pathWord;
} );
var cookPaths = [""].concat (pathNodes.map ( function (pathNode) {
if (this.pathStr) {
this.pathStr += pathNode;
}
else {
this.pathStr = "; path=";
return (this.pathStr + pathNode);
}
return (this.pathStr);
} ) );
( eraseCookie = function (cookieName) {
//--- For each path, attempt to delete the cookie.
cookPaths.forEach ( function (pathStr) {
//--- To delete a cookie, set its expiration date to a past value.
var diagStr = cookieName + "=" + pathStr + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
document.cookie = diagStr;
document.cookie = cookieName + "=" + pathStr + "; domain=" + domain + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
document.cookie = cookieName + "=" + pathStr + "; domain=" + domain2 + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
document.cookie = cookieName + "=" + pathStr + "; domain=" + domain3 + "; expires=Thu, 01-Jan-1970 00:00:01 GMT;";
} );
} ) (cookieName);
}
Дополнительная функция, для информации или отладки:
function listCookies () {
var cookieList = document.cookie.split (/;\s*/);
for (var J = 0, numCookies = cookieList.length; J < numCookies; ++J) {
console.log ("Cookie ", J, ": ", cookieList[J]);
}
}
Ваш сценарий GM также может использовать приемы iFrame для удаления файлов cookie на сторонних доменах, но в целом GM не является лучшим способом обработки файлов cookie.
Не обманывайте себя никакими другими утверждениями, Greasemonkey и javascript просто не могут удалить cookie, если не будут выполнены все условия, перечисленные в верхней части этого ответа. Обратите внимание, что javascript и Greasemonkey не могут даже см. все файлы cookie на странице.
Greasemonkey - не лучший инструмент для этого, хотя его может быть достаточно для некоторых ситуаций.
Вот несколько более мощных решений:
- Использовать Выборочное удаление cookie . Он сохраняет нужные вам куки и удаляет остальные. Это делается нажатием очень удобной кнопки или автоматически, когда Firefox закрывается. Поддерживаются как белые, так и черные списки.
- Используйте BetterPrivacy для более хитрых LSO.
- Запустите CCleaner хотя бы раз в неделю, чтобы изгнать широкий спектр слежки и промахов.
- Для мощного, настраиваемого, полностью автоматизированного удаления файлов cookie, которое не имеет серьезных ограничений, которые имеет Greasemonkey, и которое выполняется чаще, чем Выборочное удаление файлов cookie , вы можете написать собственное расширение для браузера. *