您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
To Disable YouTube Live Chat Container CSS
当前为
// ==UserScript== // @name Disable YouTube Live Chat Container CSS // @namespace UserScript // @match https://www.youtube.com/live_chat* // @grant none // @version 0.0.9 // @license MIT // @author CY Fung // @description To Disable YouTube Live Chat Container CSS // @run-at document-start // ==/UserScript== ((__CONTEXT__) => { /* bug: tabview - https://www.youtube.com/live_chat?continuation= ... */ const addCss = () => document.head.appendChild(document.createElement('style')).textContent = ` @supports (contain: layout paint style) { /* optional */ #item-offset.style-scope.yt-live-chat-item-list-renderer { height: auto !important; min-height: unset !important; } #items.style-scope.yt-live-chat-item-list-renderer { transform: translateY(0px) !important; /*padding-bottom: 0 !important; padding-top: 0 !important;*/ } /* optional */ yt-icon[icon="down_arrow"] > *, yt-icon-button#show-more > * { pointer-events: none !important; } #item-list.style-scope.yt-live-chat-renderer[class], #item-list.style-scope.yt-live-chat-renderer[class] *, yt-live-chat-item-list-renderer.style-scope.yt-live-chat-renderer[class], yt-live-chat-item-list-renderer.style-scope.yt-live-chat-renderer[class] * #item-list.style-scope.yt-live-chat-renderer[class] [class], yt-live-chat-item-list-renderer.style-scope.yt-live-chat-renderer[class] [class] { will-change: unset !important; } [wSr93] { content-visibility: visible; } [wSr93="hidden"]:nth-last-child(n+4) { content-visibility: auto; contain-intrinsic-size: auto var(--wsr94); } yt-img-shadow[height][width] { content-visibility: visible !important; } #item-offset.style-scope.yt-live-chat-item-list-renderer > #items.style-scope.yt-live-chat-item-list-renderer { position: static !important; } /* yt-live-chat-author-chip #chat-badges.yt-live-chat-author-chip, yt-live-chat-author-chip #chat-badges.yt-live-chat-author-chip yt-live-chat-author-badge-renderer, yt-live-chat-author-chip #chat-badges.yt-live-chat-author-chip yt-live-chat-author-badge-renderer #image, yt-live-chat-author-chip #chat-badges.yt-live-chat-author-chip yt-live-chat-author-badge-renderer #image img { contain: layout style; display: inline-flex; vertical-align: middle; } */ #items yt-live-chat-text-message-renderer { contain: layout style; } yt-live-chat-item-list-renderer:not([allow-scroll]) #item-scroller.yt-live-chat-item-list-renderer { overflow-y: scroll; padding-right: 0; } body yt-live-chat-app { contain: size layout paint style; overflow: hidden; } #items.style-scope.yt-live-chat-item-list-renderer { contain: layout paint style; } #item-offset.style-scope.yt-live-chat-item-list-renderer { contain: style; } #item-scroller.style-scope.yt-live-chat-item-list-renderer { contain: size style; } #contents.style-scope.yt-live-chat-item-list-renderer, #chat.style-scope.yt-live-chat-renderer, img.style-scope.yt-img-shadow[width][height] { contain: size layout paint style; } .style-scope.yt-live-chat-ticker-renderer[role="button"][aria-label], .style-scope.yt-live-chat-ticker-renderer[role="button"][aria-label] > #container { contain: layout paint style; } yt-live-chat-text-message-renderer.style-scope.yt-live-chat-item-list-renderer, yt-live-chat-membership-item-renderer.style-scope.yt-live-chat-item-list-renderer, yt-live-chat-paid-message-renderer.style-scope.yt-live-chat-item-list-renderer, yt-live-chat-banner-manager.style-scope.yt-live-chat-item-list-renderer { contain: layout style; } tp-yt-paper-tooltip[style*="inset"][role="tooltip"] { contain: layout paint style; } /* #item-offset.style-scope.yt-live-chat-item-list-renderer { position: relative !important; height: auto !important; } */ } `; const { Promise, requestAnimationFrame } = __CONTEXT__; const fxOperator = (proto, propertyName) => { let propertyDescriptorGetter = null; try { propertyDescriptorGetter = Object.getOwnPropertyDescriptor(proto, propertyName).get; } catch (e) { } return typeof propertyDescriptorGetter === 'function' ? (e) => propertyDescriptorGetter.call(e) : (e) => e[propertyName]; }; const nFirstElem = fxOperator(HTMLElement.prototype, 'firstElementChild'); const nPrevElem = fxOperator(HTMLElement.prototype, 'previousElementSibling'); const nNextElem = fxOperator(HTMLElement.prototype, 'nextElementSibling'); const nLastElem = fxOperator(HTMLElement.prototype, 'lastElementChild'); let done = 0; let main = async () => { if (done) return; let m1, m2; let maxN = 8; while (!m1 || !m2) { if (--maxN < 0) return; m1 = document.querySelector('#item-offset.style-scope.yt-live-chat-item-list-renderer'); m2 = document.querySelector('#items.style-scope.yt-live-chat-item-list-renderer'); if (m1 && m2) break; await new Promise(resolve => requestAnimationFrame(resolve)); } done = 1; addCss(); const sp7 = Symbol(); const dummy = { transform: '', height: '', maxHeight: '', paddingBottom: '', paddingTop: '' }; for(const k of ['toString', 'getPropertyPriority', 'getPropertyValue', 'item', 'removeProperty', 'setProperty']){ dummy[k]=((k)=>(function(){ const style = this[sp7]; return style[k](...arguments);}))(k) } const itemOffset = m1; const items = m2; const ph = { get(target, prop) { return (prop in dummy) ? dummy[prop] : prop === sp7 ? target: target[prop]; }, set(target, prop ,value){ if(!(prop in dummy)) { target[prop] = value; } return true; }, has(target,prop){ return (prop in target) }, deleteProperty(target,prop){ return true; }, ownKeys(target) { return Object.keys(target); }, defineProperty(target, key, descriptor) { return Object.defineProperty(target, key, descriptor); // return true; }, getOwnPropertyDescriptor(target, key) { return Object.getOwnPropertyDescriptor(target, key); }, } const d1= new Proxy(m1.style,ph); const d2= new Proxy(m2.style,ph); Object.defineProperty(m1, 'style', { get() { return d1 }, set() { }, }); Object.defineProperty(m2, 'style', { get() { return d2 }, set() { }, }); m1.removeAttribute("style"); m2.removeAttribute("style"); let p1 = 0; document.addEventListener('click', (evt) => { if (!evt.isTrusted) return; const target = ((evt || 0).target || 0) if (target.id === 'show-more') { if (target.nodeName.toLowerCase() !== 'yt-icon-button') return; if (Date.now() - p1 < 80) return; requestAnimationFrame(() => { p1 = Date.now(); target.click(); }) } }) let btnShowMore = null; requestAnimationFrame(()=>{ btnShowMore = document.querySelector('#show-more.yt-live-chat-item-list-renderer'); }) const visObserver = new IntersectionObserver((entries)=>{ for(const entry of entries){ const target = entry.target; if(!target) continue; if ( entry.isIntersecting === true ){ target.style.setProperty('--wsr94', entry.boundingClientRect.height+'px'); target.setAttribute('wSr93', 'visible'); if(nNextElem(target)===null) { Promise.resolve().then(()=>{ if(btnShowMore && btnShowMore.isConnected){ btnShowMore.click(); }else{ btnShowMore = document.querySelector('#show-more.yt-live-chat-item-list-renderer'); } if(btnShowMore) btnShowMore.click(); }); } } else if(target.getAttribute('wSr93')=== 'visible') { target.style.setProperty('--wsr94', entry.boundingClientRect.height+'px'); target.setAttribute('wSr93', 'hidden'); } } }, { /* root: items, rootMargin: "0px", threshold: 1.0, */ }); const mutObserver = new MutationObserver((mutations)=>{ let node = nLastElem(items); for(;node !== null; node = nPrevElem(node)){ if( node.hasAttribute('wSr93') )break; node.setAttribute('wSr93',''); visObserver.observe(node); } }); mutObserver.observe(m2, { childList: true, subtree: false }); }; main(); function onReady() { main(); } if (document.readyState != 'loading') { onReady(); } else { window.addEventListener("DOMContentLoaded", onReady, false); } })({ Promise, requestAnimationFrame });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址