您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a toggle button for YouTube comments with a comments icon.
// ==UserScript== // @name YouTube Comments Toggle Button // @namespace https://example.com/youtube-comments-toggle // @version 1.5 // @description Add a toggle button for YouTube comments with a comments icon. // @match *://*.youtube.com/* // @match *://m.youtube.com/* // @license MIT // @grant none // ==/UserScript== (function() { 'use strict'; const commentsSelector = 'ytm-single-column-watch-next-results-renderer .single-column-watch-next-modern-panels ytm-comments-entry-point-header-renderer.modern-styling'; var trytohide = true; function toggleComments() { const comments = document.querySelector(commentsSelector); if (comments) { const isHidden = comments.style.display === 'none'; comments.style.display = isHidden ? '' : 'none'; console.log(`Comments are now ${isHidden ? 'visible' : 'hidden'}.`); if (isHidden) { document.querySelector('#toggleButton1').style.backgroundColor = '#f2f1f0'; document.querySelector('#toggleButton1').style.color = 'black'; } else { document.querySelector('#toggleButton1').style.backgroundColor = 'black'; document.querySelector('#toggleButton1').style.color = '#f2f1f0'; } } } const htmlPolicy = window.trustedTypes?.createPolicy('default', { createHTML: (html) => html, }); function addButtonToInterface() { if (document.querySelector('#comments-toggle-button')) return; const buttonViewModel = document.createElement('button-view-model'); buttonViewModel.id = 'comments-toggle-button'; buttonViewModel.className = 'yt-spec-button-view-model slim_video_action_bar_renderer_button'; const buttonHTML = ` <yt-button-shape class="yt-spec-button-shape-next__button-shape-wiz-class" > <button class="yt-spec-button-shape-next yt-spec-button-shape-next--tonal yt-spec-button-shape-next--mono yt-spec-button-shape-next--size-m yt-spec-button-shape-next--icon-leading" id='toggleButton1'> <div class="yt-spec-button-shape-next__icon"> <c3-icon style="width: 24px; height: 24px;"> <span class="yt-icon-shape yt-spec-icon-shape"> <div style="width: 100%; height: 100%; display: block; fill: currentcolor; padding:3px"> <!-- Comments Icon SVG --> <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 121.86 122.88" width="20" height="20"> <title>comment</title> <path d="M30.28,110.09,49.37,91.78A3.84,3.84,0,0,1,52,90.72h60a2.15,2.15,0,0,0,2.16-2.16V9.82a2.16,2.16,0,0,0-.64-1.52A2.19,2.19,0,0,0,112,7.66H9.82A2.24,2.24,0,0,0,7.65,9.82V88.55a2.19,2.19,0,0,0,2.17,2.16H26.46a3.83,3.83,0,0,1,3.82,3.83v15.55ZM28.45,63.56a3.83,3.83,0,1,1,0-7.66h53a3.83,3.83,0,0,1,0,7.66Zm0-24.86a3.83,3.83,0,1,1,0-7.65h65a3.83,3.83,0,0,1,0,7.65ZM53.54,98.36,29.27,121.64a3.82,3.82,0,0,1-6.64-2.59V98.36H9.82A9.87,9.87,0,0,1,0,88.55V9.82A9.9,9.9,0,0,1,9.82,0H112a9.87,9.87,0,0,1,9.82,9.82V88.55A9.85,9.85,0,0,1,112,98.36Z"/> </svg> </div> </span> </c3-icon> </div> <div class="yt-spec-button-shape-next__button-text-content">Comments</div> <yt-touch-feedback-shape> <div class="yt-spec-touch-feedback-shape yt-spec-touch-feedback-shape--touch-response"> <div class="yt-spec-touch-feedback-shape__stroke"></div> <div class="yt-spec-touch-feedback-shape__fill"></div> </div> </yt-touch-feedback-shape> </button> </yt-button-shape> `; buttonViewModel.innerHTML = htmlPolicy ? htmlPolicy.createHTML(buttonHTML) : buttonHTML; buttonViewModel.addEventListener('click', toggleComments); const targetContainer = document.querySelector('.slim-video-action-bar-actions'); if (targetContainer) { const firstButton = targetContainer.children[0]; if (firstButton) { targetContainer.insertBefore(buttonViewModel, firstButton.nextSibling); } else { targetContainer.appendChild(buttonViewModel); } console.log('Toggle button added as the second button.'); } else { console.warn('Target container not found.'); } } const observer = new MutationObserver(() => { addButtonToInterface(); const comments = document.querySelector(commentsSelector); comments.style.display = 'none'; }); observer.observe(document.body, { childList: true, subtree: true }); setTimeout(()=>{trytohide = false}, 8000) addButtonToInterface(); })();