javascript - 从 Greasemonkey 脚本中删除所有 Google cookie

标签 javascript cookies greasemonkey

<分区>

我尝试了很多不同的脚本,但没有一个奏效。如何删除 Google 创建的 cookie 或网站的所有 cookie?

最佳答案

最好不要为此使用 Greasemonkey。这会很麻烦,可能会错过页面加载后很久设置的 cookie,并且只能在您实际浏览 Google 时删除 Google cookie。

此外,您必须设置脚本的 //@include 语句以捕获 Google 当前和 future 的所有域(google.com、accounts.google.com、mail.google.com、google -analytics.com 等)。如果谷歌提供 "Secure cookies"那些也不能被触及。

最好使用专为智能删除 cookie 而构建的工具。我推荐Selective Cookie Delete .
此外,Google 和其他网站使用比 cookie 多得多且更糟糕的方式来跟踪您。运行 CCleaner 是个好主意至少每周一次。


但是,如果您仍想使用 Greasemonkey 执行此操作,则以下代码将删除脚本运行所在域的许多 cookie:

警告:JavaScript 和 Greasemonkey 甚至无法查看页面上的所有 cookie,也无法删除“安全”(仅限服务器)cookie。

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

关于javascript - 从 Greasemonkey 脚本中删除所有 Google cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8533376/

相关文章:

javascript - 对同一页面上的多个链接使用 Javascript 灯箱效果

javascript - 将 html 内容包装在一个 div 中

javascript - 检索从 $.getJSON 返回的 Json 对象的属性

javascript - 如何在 IE8 中为两个字母的域设置 cookie?

reactjs - 跨站点 cookie 问题 : how to set cookie from backend to frontend

javascript - 如何解析嵌入式 iFrame 以仅显示来自 iframed 页面的片段?

javascript - 如何在 jQuery 选择器中用变量替换字符串以使用属性值?

javascript - 如何在 JavaScript 中处理 cookie?

javascript - 为什么这个 setTimeout() 调用在控制台中有效,而不是作为 greasemonkey 脚本?

javascript - 如何在 GreaseMonkey 中使用 javascript 模拟点击带有特定文本的 anchor ?