您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
none
// ==UserScript== // @name scratch extended - change perms // @version 0.1 // @description none // @run-at context-menu // @author You // @match *://scratch.mit.edu/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAkFJREFUeF7l2sFRAzEMBVBSBww3qqAP6qAUiqEFCuDMjQl1wPhgxuw4kS39r28P3JgkjvRsybvenJ5e379v/vHfKRPg6+O5S3378CKbgjSAS8nXzFUIKQBt8ue3zz+zffd4//u/AoEOcC35mrkSgQowkrwagQYwk7wSgQLgSV6FAAeIJK9AgAKMJl+b3nFHaLeHrMYIA5hNviarRoAAeJNfASEM4Em+XvBEPou6dg4BIBJAjBHBcAMgA0eONYvhAmAEzBhzBCMEgO7gCgQKQGQPz0ZYDqAs21mEyG00BaAkEVkFowj1O2QAJVB0H2gbl7USZACjM8ReCVIAFUJva0svgZllirrFZZ0ou5rgcRasWkUhjFzYzL4HApBZDrMJWu+HAeyKAAXYEQEOsBsCBWAnBBrALghUgB0Q6ACrI6QArIyQBrAqQirAigjpAKshSABWQpABrIIgBVgBwQ2APKBQnie4ABg/eVMhhADQP3lTIEAB2KfA7elO9LlDHQsOoEBIPxWuS1X5UKSFlgGUIFgII/1A+mBkJEBvOcyOnb4CagOZDbR8zgqWMea1o3FXE2wHRAaMHMt6HhDaBY6DIwJHjDGadPu+8ApAlIMq+RI7DMB7Y9POBmtHofYARDkwt1OrLKArwFsOipmHNsGe8mhdX5sh1PV+agl4tshegBnJw5sgaiVkJZ8CMLM7eC+drUYnK4HZcsiceXoTnC0HRfJpJXBpJfSQrJulyHLvfZZyHWAFiTxRtr7Lel0CYAWV+foPdui0399khioAAAAASUVORK5CYII= // @grant none // @license GNU GPLv3 // @namespace https://greasyfork.org/users/1184528 // ==/UserScript== (function() { if (window?.__scratchextended) { var ___scratchextended = ["all", ...Object.keys(__scratchextended).filter( (e) => !["inputtype", "eventdata", "thread"].includes(e) )] var perms = JSON.parse(localStorage.getItem(`scratch:defaultperms`) || '[""]') var div = createelem( "div", { position: "absolute", top: 0, left: "0", width: "min-content", height: "0", backgroundColor: "#444", zIndex: 9999999, }, document.body ) createelem( "p", { innerHTML: "default perms", color: "#0f0", backgroundColor: "#777" }, div ) createelem( "button", { innerHTML: "+", onclick: () => { var v = (___scratchextended).filter((k) => { return ![...div.querySelectorAll("select")] .map((e) => e.value || e) .includes(k) }) createoptions("", v, div) }, }, div ) createelem( "button", { innerHTML: "save", onclick: () => { localStorage.setItem( `scratch:defaultperms`, JSON.stringify( [...div.querySelectorAll("select")].map((e) => e.value) ) ) localStorage.setItem( `allowed:${ location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local" }`, JSON.stringify( [...div2.querySelectorAll("select")].map((e) => e.value) ) ) localStorage.setItem( `denied:${ location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local" }`, JSON.stringify( [...div3.querySelectorAll("select")].map((e) => e.value) ) ) div.remove() div2.remove() div3.remove() }, }, div ) var v = (___scratchextended).filter((k) => { return ![...perms, ...div.querySelectorAll("select")] .map((e) => e.value || e) .includes(k) }) perms.forEach((e) => { createoptions(e, v, div) }) var perms2 = JSON.parse( localStorage.getItem( `allowed:${location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local"}` ) || '[""]' ) var div2 = createelem( "div", { position: "absolute", top: 0, left: "150px", width: "min-content", height: "0", backgroundColor: "#444", zIndex: 9999999, }, document.body ) createelem( "p", { innerHTML: "allowed perms", color: "#0f0", backgroundColor: "#777" }, div2 ) createelem( "button", { innerHTML: "+", onclick: () => { var v = (___scratchextended).filter((k) => { return ![...div2.querySelectorAll("select")] .map((e) => e.value || e) .includes(k) }) v = v.filter((e) => !perms.includes(e)) createoptions("", v, div2) }, }, div2 ) createelem( "button", { innerHTML: "save", onclick: () => { localStorage.setItem( `scratch:defaultperms`, JSON.stringify( [...div.querySelectorAll("select")].map((e) => e.value) ) ) localStorage.setItem( `allowed:${ location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local" }`, JSON.stringify( [...div2.querySelectorAll("select")].map((e) => e.value) ) ) localStorage.setItem( `denied:${ location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local" }`, JSON.stringify( [...div3.querySelectorAll("select")].map((e) => e.value) ) ) div.remove() div2.remove() div3.remove() }, }, div2 ) var v = (___scratchextended).filter((k) => { return ![...perms2, ...div2.querySelectorAll("select")] .map((e) => e.value || e) .includes(k) }) v = v.filter((e) => !perms.includes(e)) perms2.forEach((e) => { createoptions(e, v, div2) }) var perms3 = JSON.parse( localStorage.getItem( `denied:${location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local"}` ) || '[""]' ) var div3 = createelem( "div", { position: "absolute", top: 0, left: "300px", width: "min-content", height: "0", backgroundColor: "#444", zIndex: 9999999, }, document.body ) createelem( "p", { innerHTML: "denied perms", color: "#0f0", backgroundColor: "#777" }, div3 ) createelem( "button", { innerHTML: "+", onclick: () => { var v = (___scratchextended).filter((k) => { return ![...div3.querySelectorAll("select")] .map((e) => e.value || e) .includes(k) }) v = v.filter((e) => !perms.includes(e)) createoptions("", v, div3) }, }, div3 ) createelem( "button", { innerHTML: "save", onclick: () => { localStorage.setItem( `scratch:defaultperms`, JSON.stringify( [...div.querySelectorAll("select")].map((e) => e.value) ) ) localStorage.setItem( `allowed:${ location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local" }`, JSON.stringify( [...div2.querySelectorAll("select")].map((e) => e.value) ) ) localStorage.setItem( `denied:${ location.href.match(/(?<=\/)[0-9]+(?=\/)/)?.[0] || "local" }`, JSON.stringify( [...div3.querySelectorAll("select")].map((e) => e.value) ) ) div.remove() div2.remove() div3.remove() }, }, div3 ) var v = (___scratchextended).filter((k) => { return ![...perms3, ...div3.querySelectorAll("select")] .map((e) => e.value || e) .includes(k) }) v = v.filter((e) => !perms.includes(e)) perms3.forEach((e) => { createoptions(e, v, div3) }) function createoptions(perm, options, div) { options = options.filter((e) => e !== perm) var s = createelem( "select", { onchange: (e) => { if (e.target.value == "remove") { e.target.remove() } }, }, div ) ;["remove", perm, ...options].forEach((e) => { if (e !== "requestperms") createelem("option", { value: e, innerHTML: e }, s) }) s.value = perm } function createelem(elem, data, parent) { elem = document.createElement(elem) if (data.style) data.style.split(" ").forEach((e) => { elem.classList.add(e) }) Object.assign(elem.style, data) Object.assign(elem, data) if (typeof parent == "string") parent = zzz.qs(parent) parent?.appendChild(elem) return elem } } else { alert('you must have scratch extended running before this can be run') } })();