您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
UX for YouTube Livestreams in https://www.youtube.com/feed/subscriptions
// ==UserScript== // @name YouTube Live Subscriptions // @namespace UserScripts // @match https://www.youtube.com/* // @grant none // @version 1.4.10 // @author CY Fung // @license MIT // @description UX for YouTube Livestreams in https://www.youtube.com/feed/subscriptions // @unwrap // @inject-into page // @run-at document-start // ==/UserScript== (() => { /** @type {globalThis.PromiseConstructor} */ const Promise = (async () => { })().constructor; // YouTube hacks Promise in WaterFox Classic and "Promise.resolve(0)" nevers resolve. const PromiseExternal = ((resolve_, reject_) => { const h = (resolve, reject) => { resolve_ = resolve; reject_ = reject }; return class PromiseExternal extends Promise { constructor(cb = h) { super(cb); if (cb === h) { /** @type {(value: any) => void} */ this.resolve = resolve_; /** @type {(reason?: any) => void} */ this.reject = reject_; } } }; })(); const insp = o => o ? (o.polymerController || o.inst || o || 0) : (o || 0); let pageRenderPromise = null; let proxy = new Proxy({ }, { set(target, prop, value) { /* if(prop ==='isFeedSubscriptions' && target[prop] !== value){ target[prop] = value; if(!value){ for(const s of document.querySelectorAll('ytd-rich-grid-row #contents.ytd-rich-grid-row[class], ytd-rich-item-renderer.ytd-rich-grid-row[class]')){ s.classList.remove('feed-subscriptions'); } }else{ for(const s of document.querySelectorAll('ytd-rich-grid-row #contents.ytd-rich-grid-row[class], ytd-rich-item-renderer.ytd-rich-grid-row[class]')){ s.classList.add('feed-subscriptions'); } } } */ target[prop] = value; } }) const wm = new WeakMap(); const dm = new WeakMap(); let foregroundPromise = null; const foregroundPromiseFn = () => (foregroundPromise = (foregroundPromise || new Promise(resolve => { requestAnimationFrame(() => { foregroundPromise = null; resolve(); }); }))); let m67t = 0; let pendingChannels = new Set(); const closestYtComponentFn = (e) => { while (e instanceof HTMLElement) { if (typeof e.is === 'string') return e; e = e.parentNode; } return null; }; const proceedChannels = () => { // if(location.pathname!=='/feed/subscriptions') return; let channels = [...pendingChannels]; pendingChannels.clear(); for (const channel of channels) { const cssSelector = `ytd-browse[page-subtype="subscriptions"]:not([hidden])`; let cssParent = document.querySelector(cssSelector) || document.querySelector('ytd-page-manager') || document.body; let videoIds = new Set([...HTMLElement.prototype.querySelectorAll.call(cssParent, `[media-owner-id="${channel}"][media-base-video-id]`)].map(e => e.getAttribute('media-base-video-id'))) let medias = [...videoIds].map(videoId => HTMLElement.prototype.querySelector.call(cssParent, `[media-owner-id="${channel}"][media-base-video-id="${videoId}"]`)).filter(e => (e instanceof HTMLElement)); let csContainer = null; // console.log(3343,channel, [...medias]) for (let mi = 0; mi < medias.length; mi++) { const media = medias[mi]; if (mi > 0) { let ytParentComponent = insp(insp(media).parentComponent || 0); if (ytParentComponent) { const ytParentComponentElement = ytParentComponent.hostElement; if (ytParentComponentElement && ytParentComponentElement.getElementsByTagName(media.tagName).length === 1) { ytParentComponentElement.setAttribute('hidden', '') } } } else { csContainer = media.parentNode.querySelector('ytd-channel-subscriptions'); csContainer.setAttribute('channel-subscriptions-active', ''); csContainer.textContent = ''; } let videoMedia = (insp(media).hostElement || 0); let videoMediaData = videoMedia ? dm.get(videoMedia) : null; if (csContainer && videoMediaData) { const box = document.createElement('ytd-channel-subscription'); const tnUrl = videoMediaData.thumbnail.thumbnails[0].url; box.style.setProperty('background-image', `url(${tnUrl})`); box.setAttribute('data-channel-id', media.getAttribute('media-owner-id')); box.setAttribute('data-video-id', media.getAttribute('media-base-video-id')); dm.set(box, videoMediaData); const data = videoMediaData || 0; let type = ''; if (data.upcomingEventData) { type = 'upcoming'; } else if (data.badges) { for (const badge of data.badges) { if (badge && badge.metadataBadgeRenderer) { const br = badge.metadataBadgeRenderer; if (br.style === "BADGE_STYLE_TYPE_LIVE_NOW" || (br.icon || 0).iconType === 'LIVE') { type = 'live-now'; } } } } if (!type && data.publishedTimeText) { type = 'published' } box.setAttribute('video-type', type) csContainer.appendChild(box); } //if(mi>0) let closestYtComponentFn(media) } if (csContainer) { let media = HTMLElement.prototype.querySelector.call(csContainer.parentNode, 'ytd-rich-grid-media'); if (media) { // console.log(media); insp(media).setTargetData(); } } } } let m68t = 0; let promiseT = Promise.resolve(); const mo1 = new MutationObserver(() => { // if(!isFeedSubscriptions && location.pathname==='/feed/subscriptions') isFeedSubscriptions = true; if (!proxy.isFeedSubscriptions) return; let p = document.querySelector('a[href="/feed/subscriptions"]'); if (p) p.setAttribute('href', '/feed/subscriptions?flow=1'); }); mo1.observe(document, { subtree: true, childList: true }); const mo2 = new MutationObserver((entries) => { // if(!isFeedSubscriptions && location.pathname==='/feed/subscriptions') isFeedSubscriptions = true; if (!proxy.isFeedSubscriptions) return; let mx = false; for (const entry of entries) { const target = entry.target; if (target instanceof HTMLElement && target.isConnected === true) { foregroundPromiseFn().then(() => { let c = target.querySelector('ytd-channel-subscriptions'); let media = target.querySelector('ytd-rich-grid-media'); let mediaCnt = insp(media); let _c72_ = mediaCnt.data._c72_; let w = null; if (_c72_) { w = wm.get(_c72_); } return; }) } } }); document.addEventListener('click', function (evt) { if (!proxy.isFeedSubscriptions) return; // console.log(3, evt) if (evt && evt.isTrusted && evt.target.nodeName === 'YTD-CHANNEL-SUBSCRIPTION') { let media = HTMLElement.prototype.querySelector.call(evt.target.parentNode.parentNode, 'ytd-rich-grid-media'); const videoId = evt.target.getAttribute('data-video-id'); // console.log(4, media,videoId) if (media) { insp(media).setTargetData(videoId) } } }, true) let runStarted = 0; let styleElement = null; const runStart = () => { if (styleElement) return; styleElement = document.createElement('style'); document.head.appendChild(styleElement).textContent = ` html { --min-preview-size: 128px; --feed-subscription-background: #fcfaff; --feed-subscription-bg-upcoming: #dedede80; --feed-subscription-bg-published: #b9b9b980; } html[dark] { --feed-subscription-background: #1d1d1d; --feed-subscription-bg-upcoming: #bdbdbd80; --feed-subscription-bg-published: #53535380; } @media all and (min-width: 600px) { html { --min-preview-size: 148px; } } @media all and (min-width: 792px) { html { --min-preview-size: 168px; } } @media all and (min-width: 1010px) { html { --min-preview-size: 16.5vw; } } @media all and (min-width: 1160px) { html { --min-preview-size: 192px; } } .feed-subscriptions ytd-rich-grid-row #contents.ytd-rich-grid-row[class] { display: flex; flex-direction: column; } .feed-subscriptions ytd-rich-item-renderer.ytd-rich-grid-row[class] { width: 100%; margin: 4px; display: flex; justify-content: center; } .feed-subscriptions #content.ytd-rich-item-renderer { column-gap: 16px; } ytd-rich-grid-media[media-base-video-id] { max-width: initial; flex: 0; flex-basis: 200px; max-width: initial; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible { justify-content: center; display: flex; flex-direction: row; column-gap: 8px; flex-wrap: wrap; flex-direction: column; flex-wrap: nowrap; min-width: min-content; justify-content: flex-start; } ytd-rich-grid-media[media-base-video-id] #avatar-link.ytd-rich-grid-media { margin: 0; padding: 0; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible > #thumbnail { /* margin: 2px; */ margin: 12px 0 12px 12px; height: min-content; flex-shrink: 1; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible > #details { padding: 0; display: flex; flex-direction: column; } ytd-rich-grid-media[media-base-video-id] #details.ytd-rich-grid-media.no-pointer { cursor: initial; } ytd-rich-grid-media[media-base-video-id] #interaction.ytd-rich-grid-media { display: none; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#details { width: auto; max-width: 390px; } ytd-rich-grid-media[media-base-video-id] #video-title.ytd-rich-grid-media[class] { -webkit-line-clamp: 3; max-height: initial; white-space: break; } ytd-rich-grid-media[media-base-video-id] #video-title.ytd-rich-grid-media[class], ytd-rich-grid-media[media-base-video-id] #video-title.ytd-rich-grid-media[class] yt-formatted-string { white-space: pre-wrap; word-break: keep-all; font-family: "游ゴシック Medium", "Yu Gothic Medium", 游ゴシック体, YuGothic, sans-serif; font-size: 14px; line-height: 1.5em; } ytd-rich-grid-media[media-base-video-id] ytd-menu-renderer.ytd-rich-grid-media { right: 6px; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#attached-survey { display: none; } ytd-rich-grid-media[media-base-video-id] + ytd-channel-subscriptions { display: flex; } ytd-rich-grid-media[media-base-video-id]:last-child { display: none; } ytd-rich-grid-media[media-base-video-id] #avatar-link { position: absolute; top: 14px; left: -45px; } ytd-rich-grid-media[media-base-video-id] ytd-video-meta-block { display: inline-block; } ytd-rich-grid-media[media-base-video-id] #meta.ytd-rich-grid-media { display: flex; flex-direction: row; flex-wrap: wrap; column-gap: 16px; padding: 0; margin: 0; margin-bottom: 30px; max-width: 290px; min-width: 290px; } ytd-rich-grid-media[media-base-video-id] ytd-video-meta-block.grid #metadata.ytd-video-meta-block { display: flex; flex-direction: row; flex-wrap: wrap; gap: 16px; row-gap: 4px; } ytd-rich-grid-media[media-base-video-id] { margin-left: 52px; } ytd-rich-grid-media[media-base-video-id] .title-badge.ytd-rich-grid-media, ytd-rich-grid-media[media-base-video-id] .video-badge.ytd-rich-grid-media { margin: 0; } ytd-rich-grid-media[media-base-video-id] ytd-video-meta-block.grid { flex-basis: 66%; } ytd-channel-subscriptions { min-width: calc(var(--min-preview-size) + 38px); flex-direction: row; flex-wrap: wrap; flex: 0; min-height: min(calc(var(--min-preview-size) / 16 * 9 * 3 + 8px), 100%); height: 0; overflow: auto; overscroll-behavior: none; gap: 4px; scroll-snap-type: y proximity; scroll-snap-stop: always; display: none; align-content: flex-start; box-sizing: content-box; flex-basis: 260px; } ytd-channel-subscriptions::-webkit-scrollbar { width: 16px; } ytd-channel-subscriptions::-webkit-scrollbar-thumb { height: 56px; border-radius: 8px; border: 4px solid transparent; background-clip: content-box; background-color: var(--yt-spec-text-secondary); } ytd-channel-subscriptions::-webkit-scrollbar-thumb { height: 56px; border-radius: 8px; border: 4px solid transparent; background-clip: content-box; background-color: hsl(0, 0%, 67%); } ytd-channel-subscription { display: block; width: var(--min-preview-size); height: calc(var(--min-preview-size) / 16 * 9); background-repeat: no-repeat; background-size: contain; scroll-snap-align: center; cursor: pointer; margin-left: 14px; min-width: var(--min-preview-size); } ytd-channel-subscription:only-child { visibility: hidden; } ytd-channel-subscription[video-type="upcoming"] { filter: brightness(0.8); background-blend-mode: overlay; background-color: var(--feed-subscription-bg-upcoming); box-shadow: 0px 0px 2px 3px #ffffffee inset; order: 1; } ytd-channel-subscription[video-type="published"] { filter: brightness(0.5); background-blend-mode: overlay; background-color: var(--feed-subscription-bg-published); order: 3; } ytd-channel-subscription[video-type="live-now"] { filter: brightness(0.9); box-shadow: 0px 0px 2px 3px #ff0000ee inset; order: 2; } ytd-channel-subscription:hover { filter: brightness(0.99); } ytd-channel-subscription.selected::before { content: ""; display: block; position: absolute; background: transparent; top: 50%; left: -14px; width: 0; height: 0; border-style: solid; border-width: 5px 0 5px 10px; border-color: transparent transparent transparent var(--yt-spec-text-primary); } ytd-channel-subscriptions { flex-basis: 16px; } ytd-rich-grid-media[media-base-video-id] { max-width: max-content; } ytd-rich-grid-media[media-base-video-id] #meta.ytd-rich-grid-media h3 { max-width: 100%; } .feed-subscriptions ytd-continuation-item-renderer { padding: 24px 0; } .feed-subscriptions ytd-continuation-item-renderer #ghost-cards { display: none; } @media all and (min-width: 1010px) { .feed-subscriptions #content.ytd-rich-item-renderer::before { content: ''; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background: var(--background-rurl); background-repeat: no-repeat; background-size: 90090px 90090px; background-position: -22523px -27526px; background-blend-mode: color-dodge; background-origin: content-box; opacity: 0.15; background-color: #79797973; pointer-events: none; } ytd-rich-grid-media[media-base-video-id] ytd-menu-renderer.ytd-rich-grid-media { margin-top: 48px; } ytd-rich-grid-media[media-base-video-id] { margin-left: 0; max-width: max-content; flex-basis: 70%; flex-grow: 3; flex-basis: 200px; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible { align-items: center; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#details { width: auto; min-width: 390px; max-width: 468px; } ytd-rich-grid-media[media-base-video-id] #meta.ytd-rich-grid-media { max-width: initial; margin-bottom: 0px; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible > #details { padding: 26px 8px; } ytd-rich-grid-media[media-base-video-id] ytd-video-meta-block { display: flex; } ytd-rich-grid-media[media-base-video-id] #avatar-link { position: static; left: auto; } ytd-channel-subscriptions { max-width: 460px; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible > #thumbnail { width: 31vw; flex-shrink: 0; align-self: center; } .feed-subscriptions #content.ytd-rich-item-renderer { flex: 1; width: 100%; max-width: 1340px; background-color: var(--feed-subscription-background); } ytd-rich-grid-media[media-base-video-id] { max-width: initial; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible > #details { min-width: 200px; max-width: 480px; } ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible { flex-direction: row; flex-wrap: nowrap; } ytd-channel-subscriptions { flex-grow: 1; min-height: calc(var(--min-preview-size) / 16 * 9 * 2 + 4px); align-self: center; } } @media all and (min-width: 1160px) { ytd-rich-grid-media[media-base-video-id] .ytd-rich-grid-media#dismissible > #thumbnail { width: 360px; flex-shrink: 0; } } @media all and (min-width: 1313px) { ytd-channel-subscriptions { flex-basis: 260px; } } ` } (async () => { await Promise.all([ customElements.whenDefined('ytd-rich-grid-renderer'), customElements.whenDefined('ytd-rich-grid-media'), customElements.whenDefined('ytd-rich-item-renderer'), ]); let dummy = document.createElement('ytd-rich-grid-media'); let cProto = insp(dummy).constructor.prototype; cProto.onDetailsClick49 = cProto.onDetailsClick; cProto.onDetailsClick = function () { if (!proxy.isFeedSubscriptions) return this.onDetailsClick49.apply(this, arguments); } cProto.setTargetData = function (newVideoId) { const hostElement = this.hostElement; const baseVideoId = hostElement.getAttribute('media-base-video-id'); const ownerId = hostElement.getAttribute('media-owner-id'); if (!baseVideoId || !ownerId) return; const currentVideoId = hostElement.getAttribute('data-selected-video-id'); if (!currentVideoId) { let q = document.querySelector(`ytd-channel-subscription[data-video-id="${baseVideoId}"]`); for (const p of q.parentNode.querySelectorAll('.selected')) p.classList.remove('selected'); q.classList.add('selected'); /* let q = document.querySelector(`ytd-channel-subscription[data-video-id="${newVideoId}"]`); q.parentNode.scrollTop= q.offsetTop - q.offsetHeight/2; */ newVideoId = baseVideoId; } else { let q = document.querySelector(`ytd-channel-subscription[data-video-id="${currentVideoId}"]`); if (q && !q.classList.contains('selected')) { for (const p of q.parentNode.querySelectorAll('.selected')) p.classList.remove('selected'); q.classList.add('selected'); hostElement.removeAttribute('data-selected-video-id') newVideoId = newVideoId || currentVideoId; } } if (!newVideoId) return; newVideoId = `${newVideoId}`; Promise.resolve().then(() => { const hostElement = this.hostElement; if (hostElement.getAttribute('data-selected-video-id') !== newVideoId) { hostElement.setAttribute('data-selected-video-id', newVideoId); const videoMedia = document.querySelector(`ytd-rich-grid-media[media-base-video-id="${newVideoId}"]`) let videoMediaData = videoMedia ? dm.get(videoMedia) : null; if (videoMediaData && videoMediaData.videoId === newVideoId && this.data._c72_ && videoMediaData._c72_ && videoMediaData.videoId !== this.data._c72_.vid) { this.data = Object.assign({}, videoMediaData); } let q = document.querySelector(`ytd-channel-subscription[data-video-id="${newVideoId}"]`); for (const p of q.parentNode.querySelectorAll('.selected')) p.classList.remove('selected'); q.classList.add('selected'); q.parentNode.scrollTop = q.offsetTop - q.offsetHeight / 2; } }) // q.scrollIntoView(); } cProto.onDetailsClick._c49_ = 1; cProto.__fixPanel__ = function () { const _c72_ = ((this || 0).data || 0)._c72_ || 0; if (!_c72_) return; const media = this.hostElement; let ytParentComponent = insp(media).parentComponent; if (ytParentComponent) { ytParentComponent = insp(ytParentComponent); ytParentComponent.hostElement.removeAttribute('hidden'); } let elem = wm.get(_c72_); if (elem) { media.parentNode.insertBefore(elem, media.nextSibling); } else { let div = document.createElement('ytd-channel-subscriptions'); media.parentNode.insertBefore(div, media.nextSibling); wm.set(_c72_, div); } pendingChannels.add(_c72_.cid); let tid = ++m67t; foregroundPromiseFn().then(() => { if (tid !== m67t) return; proceedChannels(); }); } cProto.attached49 = cProto.attached; cProto.attached = function () { if (!proxy.isFeedSubscriptions && location.pathname === '/feed/subscriptions') proxy.isFeedSubscriptions = true; if (!proxy.isFeedSubscriptions) return this.attached49.apply(this, arguments); if (!this.hostElement) return this.attached49(); if (this.hostElement && typeof this.hostElement.onDataChanged === 'function' && !this.hostElement.onDataChanged._c49_) { this.hostElement.onDataChanged = this.onDataChanged.bind(this); this.hostElement.onDataChanged._c49_ = 1; } if (this.hostElement && typeof this.hostElement.onDetailsClick === 'function' && !this.hostElement.onDetailsClick._c49_) { this.hostElement.onDetailsClick = this.onDetailsClick.bind(this); this.hostElement.onDetailsClick._c49_ = 1; } if (!runStarted) { runStarted = 1; runStart(); } if (!this.hostElement._m51_) { this.hostElement._m51_ = true; let details = HTMLElement.prototype.querySelector.call(this.hostElement, '#details'); if (details) { details.classList.add('no-pointer'); } mo2.observe(this.hostElement.parentNode, { subtree: false, childList: true }); } this.attached49(); } /* cProto.detached49 =cProto.detached cProto.detached = function(){ const data = this.data || 0; if(data){ let browseId = null; try{ browseId = data.ownerText.runs[0].navigationEndpoint.browseEndpoint.browseId }catch(e){} if(browseId){ pendingChannels.add(browseId) foregroundPromiseFn().then(proceedChannels) } } } */ cProto.dc01 = function () { const data = this.data || 0; if (data) { if (data.thumbnail && data.thumbnail.thumbnails) { let thumbnails = data.thumbnail.thumbnails; if (thumbnails.length > 1) { let u = -1; for (const tn of thumbnails) { let z = Math.round(tn.width * tn.height); if (z > u) u = z; } thumbnails = thumbnails.filter(e => Math.round(e.width * e.height) === u); if (thumbnails.length > 1) thumbnails.length = 1; data.thumbnail.thumbnails = thumbnails; } } } } let fetchedType = false; document.addEventListener('yt-page-data-fetched', (evt) => { if (evt && evt.detail) { const detail = evt.detail; if (detail.pageData && detail.pageData.page && detail.pageData.url) { if (detail.pageData.page === 'browse' && detail.pageData.url === '/feed/subscriptions') { proxy.isFeedSubscriptions = true; } else { proxy.isFeedSubscriptions = false; } fetchedType = true; // console.log(proxy.isFeedSubscriptions) } } }); document.addEventListener('yt-navigate-finish', () => { proxy.isFeedSubscriptions = location.pathname === '/feed/subscriptions'; // console.log(proxy.isFeedSubscriptions) /* if(!proxy.isFeedSubscriptions){ for(const s of document.querySelectorAll('ytd-rich-grid-row #contents.ytd-rich-grid-row[class], ytd-rich-item-renderer.ytd-rich-grid-row[class]')){ s.classList.remove('feed-subscriptions'); } return; } for(const s of document.querySelectorAll('ytd-rich-grid-row #contents.ytd-rich-grid-row[class], ytd-rich-item-renderer.ytd-rich-grid-row[class]')){ s.classList.add('feed-subscriptions'); } */ for (const media of document.querySelectorAll('ytd-rich-grid-media:not([media-base-video-id])')) { let selectedBox = media.parentNode.querySelector('ytd-channel-subscription.selected'); let baseData = media.data; if (selectedBox) { let baseData = media.data; let selectedData = dm.get(selectedBox); if (baseData && selectedData && baseData._c72_ && selectedData._c72_ && baseData._c72_ === selectedData._c72_) { let w = baseData._c72_; media.setAttribute('media-base-video-id', w.vid) media.setAttribute('media-owner-id', w.cid) media.setAttribute('data-selected-video-id', w.vid) dm.set(media, baseData) } else if (baseData && selectedData && baseData._c72_ && selectedData._c72_ && baseData._c72_ !== selectedData._c72_) { let w = baseData._c72_; media.setAttribute('media-base-video-id', w.vid) media.setAttribute('media-owner-id', w.cid); media.setAttribute('data-selected-video-id', selectedData._c72_.vid) media.data = Object.assign({}, selectedData) dm.set(media, baseData) } /* if(baseData){ pendingChannels.add(baseData.cid); let tid = ++m67t; foregroundPromiseFn().then(()=>{ if(tid!==m67t) return; proceedChannels(); }); } */ } } for (const media of document.querySelectorAll('ytd-rich-grid-media:not([media-base-video-id])')) { let baseData = media.data; if (baseData) { let w = baseData._c72_; if (w) { media.setAttribute('media-base-video-id', w.vid) media.setAttribute('media-owner-id', w.cid) dm.set(media, baseData) } } } for (const media of document.querySelectorAll('ytd-rich-item-renderer ytd-rich-grid-media')) { // insp(media).dc02(); insp(media).setBackgroundRURL(); } }) cProto.setBackgroundRURL = function () { const media = this.hostElement; // insp(media).dc02(); // const media = media.closest('ytd-rich-grid-media') const renderer = HTMLElement.prototype.closest.call(media, 'ytd-rich-item-renderer') if (!renderer) return; let src = null; try { src = this.data.owner.thumbnail.thumbnails[0].url; } catch (e) { } if (!src) return; renderer.style.setProperty('--background-rurl', `url(${src})`); } cProto.dc02 = function () { const data = this.data || 0; const media = this.hostElement; let browseId = null; try { browseId = data.owner.navigationEndpoint.browseEndpoint.browseId } catch (e) { } let videoId = null; try { videoId = data.videoId; } catch (e) { } if (data && browseId && videoId && !data._c72_) { data._c72_ = {}; dm.set(media, data); data._c72_.vid = videoId || '' data._c72_.cid = browseId || '' pendingChannels.add(browseId); let tid = ++m67t; foregroundPromiseFn().then(() => { if (tid !== m67t) return; proceedChannels(); }); media.setAttribute('media-base-video-id', videoId || ''); media.setAttribute('media-owner-id', browseId || ''); this.setBackgroundRURL(); } else if (data && browseId && videoId) { /* pendingChannels.add(browseId); let tid = ++m67t; foregroundPromiseFn().then(() => { if (tid !== m67t) return; proceedChannels(); }); */ this.setBackgroundRURL(); } if (!videoId || !browseId) { media.removeAttribute('media-base-video-id'); media.removeAttribute('media-owner-id'); } else if (!media.getAttribute('media-base-video-id') || !media.getAttribute('media-owner-id')) { /* let box = document.querySelector(`[data-channel-id="${browseId}"][data-video-id="${videoId}"]`); console.log(123100, box) if(box){ let boxC72 = ((dm.get(box)||0)||0)._c72_||0; let thisC72 = (this.data||0)._c72_; console.log(123200, boxC72, thisC72, boxC72 === thisC72) if(boxC72 && thisC72 && boxC72 === thisC72){ media.setAttribute('media-base-video-id',videoId ); media.setAttribute('media-owner-id', browseId ); }else if(boxC72 && thisC72 && boxC72 !== thisC72){ let baseVideo = box.parentNode.querySelector('.selected'); let baseVideoId = baseVideo ? baseVideo.getAttribute('data-video-id') : ''; if(baseVideoId){ media.setAttribute('media-base-video-id',baseVideoId ); media.setAttribute('data-selected-video-id',videoId ); media.setAttribute('media-owner-id', browseId ); } } } */ } if (data && data._c72_ && !this.hostElement.parentNode.querySelector('ytd-channel-subscriptions')) { this.__fixPanel__(); } } cProto.onDataChanged49 = cProto.onDataChanged; cProto.onDataChanged = function () { if (!proxy.isFeedSubscriptions && location.pathname === '/feed/subscriptions') proxy.isFeedSubscriptions = true; let skip = this.hostElement && !HTMLElement.prototype.closest.call(this.hostElement, 'ytd-browse[page-subtype="subscriptions"]'); // if(location.pathname!=='/feed/subscriptions') return this.onDataChanged49.apply(this, arguments); if (!skip) this.dc01(); let r = this.onDataChanged49.apply(this, arguments); if (!skip) this.dc02(); return r; } cProto.onDataChanged._c49_ = 1; dummy = document.createElement('ytd-rich-grid-renderer'); cProto = insp(dummy).constructor.prototype; cProto._triggerFeedSubscriptions = function () { if (!fetchedType && !proxy.isFeedSubscriptions && location.pathname === '/feed/subscriptions') proxy.isFeedSubscriptions = true; if (this.hostElement) { this.hostElement.classList.toggle('feed-subscriptions', proxy.isFeedSubscriptions) if (styleElement && proxy.isFeedSubscriptions && !styleElement.parentNode) document.head.appendChild(styleElement); else if (styleElement && !proxy.isFeedSubscriptions && styleElement.parentNode) (styleElement).remove(); } } cProto.attached59 = cProto.attached; cProto.attached = function () { this._triggerFeedSubscriptions(); return this.attached59(); } cProto.refreshGridLayout49 = cProto.refreshGridLayout; cProto.refreshGridLayout = function () { this._triggerFeedSubscriptions(); if (proxy.isFeedSubscriptions) { if (this._fs74_) return; this._fs74_ = 1; } else { this._fs74_ = 0; } return this.refreshGridLayout49.apply(this, arguments); } cProto.calcElementsPerRow49 = cProto.calcElementsPerRow; cProto.calcElementsPerRow = function () { this._triggerFeedSubscriptions(); return this.calcElementsPerRow49.apply(this, arguments); } })(); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址