您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hides chat on YouTube live streams by default
当前为
- // ==UserScript==
- // @name YouTube Hide Chat by Default
- // @namespace https://skoshy.com
- // @version 0.3.0
- // @description Hides chat on YouTube live streams by default
- // @author Stefan K.
- // @match https://*.youtube.com/*
- // @grant none
- // @icon https://youtube.com/favicon.ico
- // ==/UserScript==
- (function() {
- "use strict";
- const scriptId = "youtube-hide-chat-by-default";
- // configurable vars
- // - if youtube decides to use a new button type, add it here
- const buttonSelectors = ["paper-button", "ytd-toggle-button-renderer"];
- // - for different languages for the HIDE CHAT text, add them here
- const hideChatTexts = [
- 'HIDE CHAT', // english
- 'OCULTAR CHAT', // spanish
- 'MASQUER LA CONVERSATION PAR CHAT', // french
- 'MASQUER LE CLAVARDAGE', // french canada
- 'NASCONDI CHAT', // italian
- 'OCULTAR CONVERSA', // portuguese
- 'চ্চাট লুকুৱাওক', // bengali
- 'च्याट लुकाउनुहोस्', // nepali
- 'चैट छिपाएं', // hindi
- 'チャットを非表示', // japanese
- '隐藏聊天记录', // zh-Hans-CN
- '隱藏即時通訊', // zh-Hant-TW and zh-Hant-HK
- ];
- function log(...toLog) {
- console.log(`[${scriptId}]:`, ...toLog);
- }
- function setAndGetNodeId(node) {
- const nodeIdString = `${scriptId}-id`;
- let nodeId = node.getAttribute(nodeIdString);
- let hadNodeIdSet = true;
- // log("new node found", { nodeId, hadNodeIdSet, node });
- if (!nodeId) {
- hadNodeIdSet = false;
- nodeId = Math.random().toString();
- node.setAttribute(nodeIdString, nodeId);
- }
- return { nodeId, hadNodeIdSet };
- }
- function addedNodeHandler(node) {
- if (!(
- node.matches &&
- buttonSelectors.some(b => node.matches(b))
- )) {
- return;
- }
- const { nodeId, hadNodeIdSet } = setAndGetNodeId(node);
- if (!hadNodeIdSet) {
- // this is a new element
- if (hideChatTexts.includes(node.innerText.toUpperCase().trim())) {
- node.click();
- log(`Hid the chat by default`);
- }
- }
- }
- const bodyObserver = new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- mutation.addedNodes.forEach(addedNode => {
- addedNodeHandler(addedNode);
- // it might be text node or comment node which don't have querySelectorAll
- if (addedNode.querySelectorAll) {
- buttonSelectors.forEach(bs => {
- addedNode.querySelectorAll(bs).forEach(addedNodeHandler);
- })
- }
- });
- });
- });
- bodyObserver.observe(document.body, {
- attributes: true,
- childList: true,
- subtree: true,
- characterData: true
- });
- })();