Cookie Editor

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

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==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: "実用的",
    }
})();