Cookie Editor

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

  1. // ==UserScript==
  2. // @name Cookie Editor
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description サイト内のCookieを編集できるようになるスクリプトです。
  6. // @author You
  7. // @match *.x-feeder.info/*/
  8. // @match *.x-feeder.info/*/sp/
  9. // @exclude *.x-feeder.info/*/settings/**
  10. // @match http://drrrkari.com/room/
  11. // @match http://www.3751chat.com/ChatRoom*
  12. // @match https://pictsense.com/*
  13. // @match http://www.himachat.com/
  14. // @match https://discord.com/*
  15. // @match https://*.open2ch.net/*
  16. // @require https://greasyfork.org/scripts/396472-yaju1919/code/yaju1919.js?version=798050
  17. // @require https://greasyfork.org/scripts/388005-managed-extensions/code/Managed_Extensions.js?version=720959
  18. // @grant GM.setValue
  19. // @grant GM.getValue
  20. // ==/UserScript==
  21.  
  22. (function() {
  23. 'use strict';
  24. // カスタマイズ領域
  25. const cookieInfoColor = "lightyellow"; // Cookie情報の色
  26. //-----------------
  27. // Cookieをセットする関数。「feederチャット - sidを変える」(https://greasyfork.org/ja/scripts/402949)というスクリプトからお借りしました。
  28. function setCookie(c_name, value, expiredays) {
  29. // pathの指定
  30. var path = location.pathname;
  31. // pathをフォルダ毎に指定する場合のIE対策
  32. var paths = new Array();
  33. paths = path.split("/");
  34. if (paths[paths.length - 1] != "") {
  35. paths[paths.length - 1] = "";
  36. path = paths.join("/");
  37. }
  38. // 有効期限の日付
  39. var extime = new Date().getTime();
  40. var cltime = new Date(extime + (60 * 60 * 24 * 1000 * expiredays));
  41. var exdate = cltime.toUTCString();
  42. // クッキーに保存する文字列を生成
  43. var s = "";
  44. s += c_name + "=" + encodeURIComponent(value); // 値はエンコードしておく
  45. s += "; path=" + path;
  46. if (expiredays) {
  47. s += "; expires=" + exdate + "; ";
  48. } else {
  49. s += "; ";
  50. }
  51. // クッキーに保存
  52. document.cookie = s;
  53. }
  54. //---------------------------------------------------------------------------------------------------------------------------------------
  55. const addBtn = (h, title, func) => { // ボタンを追加する関数
  56. return $("<button>").text(title).click(func).appendTo(h);
  57. };
  58. let inputCookieName, inputCookieValue, inputCookieExpireDays, si; // siはsetIntervalのidを格納する変数
  59. const setConfig = () => {
  60. const h = $("<div>");
  61. let oldCookies;
  62. let cookieInfo = $("<div>").css("color", cookieInfoColor).appendTo(h); // サイト内のCookieを表示する要素
  63. inputCookieName = yaju1919.addInputText(h, {
  64. title: "Cookieの名前",
  65. placeholder: "Cookieの名前を入力",
  66. save: "AM_inputCookieName",
  67. width: "90%",
  68. });
  69. inputCookieValue = yaju1919.addInputText(h, {
  70. title: "Cookieの値",
  71. placeholder: "Cookieの値を入力",
  72. save: "AM_inputCookieValue",
  73. width: "90%",
  74. });
  75. inputCookieExpireDays = yaju1919.addInputNumber(h, {
  76. title: "Cookieの有効期限",
  77. placeholder: "Cookieの有効期限を入力",
  78. save: "AM_inputCookieExpireDays",
  79. width: "90%",
  80. value: 0,
  81. min: Number.NEGATIVE_INFINITY,
  82. max: Infinity,
  83. });
  84. const cookieInfoLoad = () => { // Cookieを取得
  85. if (oldCookies === document.cookie) return;
  86. cookieInfo.empty().text(`Cookie : ${document.cookie.split(";").length}個`);
  87. let activeElm = document.activeElement;
  88. let cookies = document.cookie;
  89. let cookieInfoElm;
  90. oldCookies = cookies;
  91. cookies.split(";").forEach(v => {
  92. cookieInfoElm = yaju1919.addInputText(cookieInfo, {
  93. readonly: true,
  94. textarea: true,
  95. value: v === "" ? "Cookieが見つかりませんでした。" : v,
  96. width: "100%",
  97. });
  98. let elm = h.find("textarea").last();
  99. elm.focus(() => { // フォーカスされた要素に表示されているCookieの名前と値を入力欄に入力
  100. if (elm.val() === "Cookieが見つかりませんでした。") return;
  101. elm.val().split("=").forEach((v, i) => {
  102. h.find("input").eq(i).val(decodeURIComponent(v));
  103. });
  104. });
  105. });
  106. activeElm.focus();
  107. }
  108. addBtn(h, "編集", () => {
  109. const cookieName = inputCookieName();
  110. const cookieValue = inputCookieValue();
  111. const cookieExpireDays = inputCookieExpireDays();
  112. setCookie(cookieName, cookieValue, cookieExpireDays);
  113. cookieInfoLoad();
  114. });
  115. addBtn(h, "Cookie全削除", () => {
  116. let cookies = document.cookie;
  117. cookies.split("; ").forEach(v => {
  118. setCookie(v.replace(/=.*/, ""), "", -1);
  119. cookieInfoLoad();
  120. });
  121. });
  122. addBtn(h, "ページリロード", () => {
  123. location.reload();
  124. });
  125. // Cookieを1秒間隔で取得
  126. clearInterval(si);
  127. si = setInterval(() => {
  128. cookieInfoLoad();
  129. }, 1000);
  130. //----------------------
  131. cookieInfoLoad(); // 起動時にCookieを取得
  132. return h;
  133. }
  134. win.Managed_Extensions["Cookie Editor"] = {
  135. config: setConfig,
  136. tag: "実用的",
  137. }
  138. })();