您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hide chat on YouTube live videos by default.
// ==UserScript== // @name YouTube - Hide chat by default // @namespace amekusa.yt-hide-chat // @author amekusa // @version 2.0.0 // @description Hide chat on YouTube live videos by default. // @match https://www.youtube.com/* // @run-at document-start // @grant none // @license MIT // @homepage https://github.com/amekusa/monkeyscripts // ==/UserScript== (function (doc) { // --- config --- let wait = 4000; // initial wait time (ms) let interval = 2000; // update interval (ms) let match = /^https:\/\/www\.youtube\.com\/(?:watch\?|clip\/)/; // url pattern let debug = false ? console.debug : (() => {}); // -------------- let watcher; let paused; let hide; function findCloseButton() { try { let fr = doc.querySelector('iframe#chatframe'); // frame if (!fr) return null; fr = fr.contentWindow.document; if (!fr.querySelector('yt-live-chat-item-list-renderer #items [id], yt-live-chat-item-list-renderer #empty-state-message')) return null; return fr.querySelector('yt-live-chat-header-renderer #close-button button'); } catch (e) { return null; } } function unhide() { debug('unhide.'); hide = false; } function update() { if (paused || !hide) return; // do nothing // find & click the close button let btn = findCloseButton(); if (btn) { debug('click:', btn); return btn.dispatchEvent(new Event('click')); } // hook "Show chat" button btn = doc.querySelector('#chat-container #show-hide-button button'); if (btn) { btn.removeEventListener('click', unhide); btn.addEventListener('click', unhide); } } function pause() { if (paused) return; debug('pause.'); paused = true; if (watcher) { clearTimeout(watcher); clearInterval(watcher); watcher = null; } } function init() { if (watcher) return; // already running if (!location.href.match(match)) { debug('url mismatch:', location.href); return; } if (paused) { debug('resume.'); paused = false; } debug('initializing...'); hide = true; watcher = setTimeout(() => { watcher = setInterval(update, interval); debug('initialized.'); update(); }, wait); } doc.addEventListener('DOMContentLoaded', init); doc.addEventListener('yt-navigate-finish', init); doc.addEventListener('yt-navigate-start', pause); })(document);