您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
ユーザーによる動的な設定が必要な複数のユーザースクリプトを管理します。
// ==UserScript== // @name 拡張機能マネージャー[ARCHIVE] // @namespace http://tampermonkey.net/ // @version 1.3 // @description ユーザーによる動的な設定が必要な複数のユーザースクリプトを管理します。 // @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://gf.qytechs.cn/scripts/387509-yaju1919-library/code/yaju1919_library.js?version=722017 // @require https://gf.qytechs.cn/scripts/388005-managed-extensions/code/Managed_Extensions.js?version=720959 // @grant GM.setValue // @grant GM.getValue // @grant GM.xmlHttpRequest // ==/UserScript== (function() { 'use strict'; const yaju1919 = yaju1919_library; //-------サイト別グローバル空間にjQueryを読み込む------------------------------------------------------------------------------------------------------------------------- switch(yaju1919.getDomain(location.href)){ case "pictsense.com": yaju1919.get("https://code.jquery.com/jquery-3.3.1.min.js",{ success: r => win.eval(r), fail: r => console.warn("jQueryの読み込みに失敗しました") }); break; case "3751chat.com": yaju1919.get("https://code.jquery.com/jquery-3.3.1.min.js",{ success: r => win.eval(r), fail: r => console.warn("jQueryの読み込みに失敗しました") }); break; case "discord.com": yaju1919.get("https://code.jquery.com/jquery-3.3.1.min.js",{ success: r => win.eval(r), fail: r => console.warn("jQueryの読み込みに失敗しました") }); break; } //-------------------------------------------------------------------------------------------------------------------------------- const main = () => { const font="white", // 文字色 back="rgba( 0, 0, 0, 0.7 )"; // 背景色 //------holder要素----------------------------------------------------------------------------------------------------------------------- let toggle_flag; const toggle = () => { toggle_flag = !toggle_flag; parent_holder.css({ left: toggle_flag ? 0 : -parent_holder.width()*1.4, }); }; const toggle_btn = $("<button>",{text:"拡張機能"}).appendTo($("body")) .css({ backgroundColor:"blue", color:"yellow", position: "fixed", zIndex: 364364, left: 0, top: 0, }).click(toggle); const parent_holder = $("<div>",{text:"拡張機能マネージャー"}).appendTo($("body")).css({ padding: "1em", color: font, backgroundColor: back, position: "fixed", zIndex: 114514, top: 0, height: "100vh", width: "22em", maxWidth: "90vw", transition: "all .5s", overflow: "scroll", "text-align": "left", fontSize: "1em" }); parent_holder.css("left",-parent_holder.width()*1.4); //-------------------------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------------------------- //-------サイト別改変------------------------------------------------------------------------------------------------------------------------- let say; switch(yaju1919.getDomain(location.href)){ case "x-feeder.info": say = str => { if(!str.length) return; if(str.length > 1000) return; $.post(location.origin + location.pathname.match(/\/[^\/]*\//)[0] + "post_feed.php",{ name: $("#post_form_name").val(), comment: str, is_special: 0, category_id: 0 }); }; break; case "pictsense.com": say = str => { if(!str.length) return; if(str.length > 200) return; $("#chatText").val(str); $("#chatText").next().click(); }; break; case "drrrkari.com": say = str => { if(!str.length) return; $(".inputarea").find("textarea").val(str); $(".submit").find("input").click(); }; break; case "himachat.com": say = str => { if(!str.length) return; if(str.length > 150) return; $(".formbar").val(str); $(".formbar").next().click(); }; break; case "3751chat.com": say = str => { if(!str.length) return; if(str.length > 1000) return; $("#chat").val(str); $("#chat").next().click(); }; break; case "discord.com": { let input_authorization = yaju1919.appendInputText(parent_holder.append("<br>"),{ title: "authorization", explain: "発言に必要なキー(必須)", save: "authorization" }); say = str => { if(!str.length) return; if(str.length > 1000) return; const room_id = location.href.match(/([0-9]+)\/([0-9]+)/)[2]; const url = `https://discordapp.com/api/v6/channels/${room_id}/messages`; yaju1919.post(url,{ headers: { authorization: input_authorization() }, type: "application/json", json: { content: str, tts: false, }, success: r => console.log("成功"), fail: r => console.warn("失敗"), }); }; } break; case "open2ch.net": toggle_btn.css("left", "10em"); say = str => { $("#MESSAGE").val(str); $("#submit_button").click(); }; break; } //-------------------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------------------------- const getType = yaju1919.getType; const configList = {}; const tagList = {}; const addTagList = ({key,tag}={}) => { if(getType(key) !== "String") return; if(!tagList[tag]) tagList[tag] = []; tagList[tag].push(key); list_tag[tag] = tag; }; const ALL_SIGN = "すべて"; const addConfigList = ({key,config,tag}={}) => { if(configList[key]) return; if(getType(config) !== "Function") return; configList[key] = config; list_Individual[key] = key; addTagList({key:key,tag:ALL_SIGN}); if(getType(tag) === "String") addTagList({key:key,tag:tag}); else if(getType(tag) === "Array"){ for(const v of tag) addTagList({key:key,tag:v}); } }; const updateSelect = () => { const keys = Object.keys(configList); for(const k in win.Managed_Extensions){ if(keys.indexOf(k)!==-1) continue; const now = win.Managed_Extensions[k]; switch(getType(now)){ case "Function": addConfigList({key:k,config:now}); break; case "Object": now.key = k; addConfigList(now); break; } } select.trigger('update'); }; const list_Individual = { "▼拡張機能を選択": null }; const h_1 = $("<div>").appendTo(parent_holder); yaju1919.appendSelect(h_1,{ list: list_Individual, width: "90%", change: v => { main_holder.empty(); if(!v) return; main_holder.append(configList[v](say)); h_2.find("select").val(null); }, }); const list_tag = { "▼タグから選択": null }; const h_2 = $("<div>").appendTo(parent_holder); yaju1919.appendSelect(h_2,{ list: list_tag, width: "90%", change: v => { main_holder.empty(); if(!v) return; let i = 0; for(const k of tagList[v]) { $("<div>",{text:`${++i}. ${k}`}).appendTo(main_holder).append(configList[k](say)); main_holder.append("<br><br>"); } h_1.find("select").val(null); }, }); const main_holder = $("<div>").appendTo(parent_holder.append("<br>")); const select = parent_holder.find("select"); select.click(updateSelect); setTimeout(updateSelect,2000); parent_holder.children().each((i,e)=>$(e).append("<br>")); }; const observe = () => { // jQueryが読み込まれるまで待つ if(win.$) main(); else setTimeout(observe,2000);; }; setTimeout(observe,2000); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址