Cookie Editor

サイト内のCookieを編集できるようになるスクリプトです。

Versión del día 23/05/2020. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         Cookie Editor
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  サイト内のCookieを編集できるようになるスクリプトです。
// @author       You
// @match        *.x-feeder.info/*/
// @match        *.x-feeder.info/*/sp/
// @exclude      *.x-feeder.info/*/settings/**
// @match        http://drrrkari.com/room/
// @match        http://www.3751chat.com/ChatRoom*
// @match        https://pictsense.com/*
// @match        http://www.himachat.com/
// @match        https://discord.com/*
// @match        https://*.open2ch.net/*
// @require      https://greatest.deepsurf.us/scripts/396472-yaju1919/code/yaju1919.js?version=798050
// @require      https://greatest.deepsurf.us/scripts/388005-managed-extensions/code/Managed_Extensions.js?version=720959
// @grant        GM.setValue
// @grant        GM.getValue
// ==/UserScript==

(function() {
    'use strict';
    // カスタマイズ領域
    const cookieInfoColor = "lightyellow"; // Cookie情報の色
    //-----------------
    // Cookieをセットする関数。「feederチャット - sidを変える」(https://greatest.deepsurf.us/ja/scripts/402949)というスクリプトからお借りしました。
    function setCookie(c_name, value, expiredays) {
        // pathの指定
        var path = location.pathname;
        // pathをフォルダ毎に指定する場合のIE対策
        var paths = new Array();
        paths = path.split("/");
        if (paths[paths.length - 1] != "") {
            paths[paths.length - 1] = "";
            path = paths.join("/");
        }
        // 有効期限の日付
        var extime = new Date().getTime();
        var cltime = new Date(extime + (60 * 60 * 24 * 1000 * expiredays));
        var exdate = cltime.toUTCString();
        // クッキーに保存する文字列を生成
        var s = "";
        s += c_name + "=" + encodeURIComponent(value); // 値はエンコードしておく
        s += "; path=" + path;
        if (expiredays) {
            s += "; expires=" + exdate + "; ";
        } else {
            s += "; ";
        }
        // クッキーに保存
        document.cookie = s;
    }
    //---------------------------------------------------------------------------------------------------------------------------------------
    const addBtn = (h, title, func) => { // ボタンを追加する関数
        return $("<button>").text(title).click(func).appendTo(h);
    };
    let inputCookieName, inputCookieValue, inputCookieExpireDays, si; // siはsetIntervalのidを格納する変数
    const setConfig = () => {
        const h = $("<div>");
        let oldCookies;
        let cookieInfo = $("<div>").css("color", cookieInfoColor).appendTo(h); // サイト内のCookieを表示する要素
        inputCookieName = yaju1919.addInputText(h, {
            title: "Cookieの名前",
            placeholder: "Cookieの名前を入力",
            save: "AM_inputCookieName",
            width: "90%",
        });
        inputCookieValue = yaju1919.addInputText(h, {
            title: "Cookieの値",
            placeholder: "Cookieの値を入力",
            save: "AM_inputCookieValue",
            width: "90%",
        });
        inputCookieExpireDays = yaju1919.addInputNumber(h, {
            title: "Cookieの有効期限",
            placeholder: "Cookieの有効期限を入力",
            save: "AM_inputCookieExpireDays",
            width: "90%",
            value: 0,
            min: Number.NEGATIVE_INFINITY,
            max: Infinity,
        });
        const cookieInfoLoad = () => { // Cookieを取得
            if (oldCookies === document.cookie) return;
            cookieInfo.empty().text(`Cookie : ${document.cookie.split(";").length}個`);
            let activeElm = document.activeElement;
            let cookies = document.cookie;
            let cookieInfoElm;
            oldCookies = cookies;
            cookies.split(";").forEach(v => {
                cookieInfoElm = yaju1919.addInputText(cookieInfo, {
                    readonly: true,
                    textarea: true,
                    value: v === "" ? "Cookieが見つかりませんでした。" : v,
                    width: "100%",
                });
                let elm = h.find("textarea").last();
                elm.focus(() => { // フォーカスされた要素に表示されているCookieの名前と値を入力欄に入力
                    if (elm.val() === "Cookieが見つかりませんでした。") return;
                    elm.val().split("=").forEach((v, i) => {
                        h.find("input").eq(i).val(decodeURIComponent(v));
                    });
                });
            });
            activeElm.focus();
        }
        addBtn(h, "編集", () => {
            const cookieName = inputCookieName();
            const cookieValue = inputCookieValue();
            const cookieExpireDays = inputCookieExpireDays();
            setCookie(cookieName, cookieValue, cookieExpireDays);
            cookieInfoLoad();
        });
        addBtn(h, "Cookie全削除", () => {
            let cookies = document.cookie;
            cookies.split("; ").forEach(v => {
                setCookie(v.replace(/=.*/, ""), "", -1);
                cookieInfoLoad();
            });
        });
        addBtn(h, "ページリロード", () => {
            location.reload();
        });
        // Cookieを1秒間隔で取得
        clearInterval(si);
        si = setInterval(() => {
            cookieInfoLoad();
        }, 1000);
        //----------------------
        cookieInfoLoad(); // 起動時にCookieを取得
        return h;
    }
    win.Managed_Extensions["Cookie Editor"] = {
        config: setConfig,
        tag: "実用的",
    }
})();