您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Remove buttons
// ==UserScript== // @name Youtube Player Simplifier // @namespace LeKAKiD // @match https://*.youtube.com/* // @exclude https://*.youtube.com/live_chat // @grant GM_getValue // @grant GM_setValue // @grant GM_addValueChangeListener // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @version 1.7 // @author LeKAKiD // @description Remove buttons // @license MIT // ==/UserScript== const ytButtons = { progress: { label: '탐색 불가 진행바', style: ` div.ytp-progress-bar-container[aria-disabled] { display: none !important; } `, }, next: { label: '다음 재생 버튼', style: ` a.ytp-next-button { display: none !important; } `, }, autonav: { label: '자동 재생 버튼', style: ` [data-tooltip-target-id="ytp-autonav-toggle-button"] { display: none !important; } `, }, subtitle: { label: '사용 불가 자막 버튼', style: ` .ytp-subtitles-button:not([title$="(c)"]):not(:hover) { display: none !important; } `, }, youtube: { label: '유튜브에서 보기 버튼', style: ` .ytp-youtube-button { display: none !important; } `, }, miniplayer: { label: '미니 플레이어 버튼', style: ` .ytp-miniplayer-button { display: none !important; } `, }, theater: { label: '극장 모드 버튼', style: ` .ytp-size-button { display: none !important; } `, }, remote: { label: 'TV에서 보기 버튼', style: ` .ytp-remote-button { display: none !important; } `, }, fullscreen: { label: '전체화면 버튼', style: ` .ytp-fullscreen-button { display: none !important; } `, }, } const defaultConfig = { progress: false, next: true, autonav: true, subtitle: false, youtube: false, miniplayer: true, theater: true, remote: true, fullscreen: true, } const menuID = { progress: undefined, next: undefined, autonav: undefined, subtitle: undefined, youtube: undefined, miniplayer: undefined, theater: undefined, remote: undefined, fullscreen: undefined, } let currentConfig = { ...defaultConfig, ...GM_getValue('config', undefined), } const styleElement = document.createElement('style'); document.head.append(styleElement); function setStyle(config) { const configEntries = Object.entries(currentConfig); const styleList = configEntries .filter(([key, value]) => !value) .map(([key, value]) => ytButtons[key].style); styleElement.textContent = styleList.join('\n'); } function commandGenerator(key) { return () => { currentConfig[key] = !currentConfig[key]; GM_setValue('config', currentConfig); } } function renderMenu() { Object.entries(currentConfig).forEach(([key, value]) => { const { label } = ytButtons[key]; menuID[key] = GM_registerMenuCommand(`${label}: ${value ? '표시됨': '숨겨짐'}`, commandGenerator(key)); // console.log(`registered ${menuID[key]} (${key} - ${value})`); }); } function clearMenu() { Object.entries(menuID).forEach(([key, value]) => { // console.log(`unregistered ${value} (${key})`); GM_unregisterMenuCommand(value); }); } GM_addValueChangeListener('config', (_key, _prev, next) => { currentConfig = next; setStyle(); clearMenu(); renderMenu(); }); setStyle(); renderMenu();