9

Greasemonkey は特定のドメインから Cookie を削除できますか? もしそうなら、どのように?

4

2 に答える 2

14

Greasemonkey が削除できるものには大きな制限があります。他のツールの方が目的に適している場合があります。以下を参照してください。ただし、これらの条件がすべて満たされている場合:

  • 削除する Cookie は、現在のページのドメインにあります。
  • それらは「安全なクッキー」ではありません。
  • /、空のパスなどを含む可能なパスをループします。
  • ページが読み込まれた後、JavaScript によって設定される Cookie はありません。
  • あなたを本当に追跡するのは「クッキー」です。多くの Web サイトでは、LSO やローカル ストレージなど、さまざまな手法が使用されています。

THEN、次のコードはそれらを削除します:

//--- 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 はこれに最適なツールではありませんが、特定の状況では十分な場合があります。

より強力なソリューションを次に示します。

  1. 選択的 Cookie 削除を使用します。必要な Cookie を保持し、残りを削除します。これは、非常に便利なボタンを押すか、Firefox を閉じるときに自動的に行われます。ホワイトリストとブラックリストの両方がサポートされています。
  2. より卑劣な LSO には BetterPrivacy を使用します。
  3. CCleanerを少なくとも 1 週間に 1 回実行して、広範囲のトラッキングとクラフトを排除します。
  4. Greasemonkey のような厳しい制限がなく、 Selective Cookie Deleteよりも頻繁に実行される、強力でカスタムの完全自動化された Cookie の削除については、独自のブラウザー拡張機能を作成できます。
于 2012-03-15T20:53:53.710 に答える
0

現在開いているサイトの Cookie を削除できるはずです。Cookie Zapper scriptを見てください。これはあなたが望むことをするかもしれません。そうでない場合、ソースはおそらくあなたを正しい方向に向けるでしょう。

于 2012-03-15T12:24:34.440 に答える