您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Open channels with updates in new tabs
// ==UserScript== // @name YouTube Check Out Updated Channels // @namespace http://tampermonkey.net/ // @version 0.8 // @description Open channels with updates in new tabs // @author Nathaniel Wu // @include *://www.youtube.com/* // @include *://www.youtube.com // @license Apache-2.0 // @supportURL https://gist.github.com/Nathaniel-Wu/fabd62df2d6146121fa4b9cfcae08763 // @run-at document-idle // ==/UserScript== (function () { 'use strict'; function is_channel_updated(channel) { return window.getComputedStyle(channel.querySelector('div#newness-dot')).display == "block"; } function is_channel_broadcasting(channel) { return window.getComputedStyle(channel.querySelector('div#newness-dot')).display == "none" && Boolean(channel.querySelector('yt-icon.guide-entry-badge.style-scope.ytd-guide-entry-renderer svg')); } function click_videos_tab() { let ret = false; document.querySelectorAll('#tabsContent > tp-yt-paper-tab > div').forEach(e => { if (/[Vv][Ii][Dd][Ee][Oo][Ss]/g.test(e.innerText)) { e.click(); ret = true; } }); return ret; } let accumulated_delay = 0; function check_for_updates(subscriptions) { subscriptions.querySelectorAll('ytd-guide-entry-renderer').forEach(channel => { console.info(channel); if (is_channel_updated(channel)) { setTimeout(() => { channel.querySelector('a').click(); }, accumulated_delay += 500); } }); } function checkout_updated_channels() { let subscriptions = document.querySelector('div#content > tp-yt-app-drawer#guide div#sections > ytd-guide-section-renderer:nth-of-type(2) > div#items');//subject to change if (subscriptions == null) return false; let channels = subscriptions.querySelectorAll(':scope > ytd-guide-entry-renderer.style-scope.ytd-guide-section-renderer'); if (is_channel_updated(channels[channels.length - 1]) || is_channel_broadcasting(channels[channels.length - 1])) { let active_DOMNodeInsertion = 0; const observer = new MutationObserver(mutationList => mutationList.filter(m => m.type === 'childList').forEach(m => { m.addedNodes.forEach(() => { active_DOMNodeInsertion++; setTimeout(() => { active_DOMNodeInsertion--; if (active_DOMNodeInsertion == 0) { check_for_updates(subscriptions); } }, 2000); }); })); observer.observe(subscriptions, { childList: true, subtree: true }); subscriptions.querySelector('ytd-guide-collapsible-entry-renderer > ytd-guide-entry-renderer#expander-item').click(); } else check_for_updates(subscriptions); return true; } function repeat_until_successful(function_ptr, interval) { if (!function_ptr()) setTimeout(() => { repeat_until_successful(function_ptr, interval); }, interval); } function in_iframe() { try { return window.self !== window.top; } catch (e) { return true; } } function on_subscription_page() { return /^https?:\/\/((www|m)\.)?youtube\.com\/feed\/subscriptions\/?$/.test(window.location.href); } if (!in_iframe()) { if (on_subscription_page()) repeat_until_successful(checkout_updated_channels, 1000); document.addEventListener('transitionend', (e) => { if (e.target.id === 'progress' && on_subscription_page()) repeat_until_successful(checkout_updated_channels, 1000); }); } })();