您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
To Disable all YouTube EXPERIMENT_FLAGS
当前为
// ==UserScript== // @name Disable all YouTube EXPERIMENT_FLAGS // @namespace UserScripts // @match https://www.youtube.com/* // @version 0.1.1 // @license MIT // @author CY Fung // @description To Disable all YouTube EXPERIMENT_FLAGS // @grant none // @unwrap // @run-at document-start // @allFrames true // @inject-into page // ==/UserScript== ((__CONTEXT__) => { let fStop = false; let isMainWindow = false; let mz = new Set(); try { isMainWindow = window.document === window.top.document } catch (e) { } const { Promise, requestAnimationFrame } = __CONTEXT__; function f() { if (fStop) return; let EXPERIMENT_FLAGS = null; try { EXPERIMENT_FLAGS = yt.config_.EXPERIMENT_FLAGS } catch (e) { } if (EXPERIMENT_FLAGS) { if (isMainWindow) { for (const [key, value] of Object.entries(EXPERIMENT_FLAGS)) { if (value === true) { // if(key.indexOf('modern')>=0 || key.indexOf('enable')>=0 || key.indexOf('theme')>=0 || key.indexOf('skip')>=0 || key.indexOf('ui')>=0 || key.indexOf('observer')>=0 || key.indexOf('polymer')>=0 )continue; if (mz.has(key)) continue; mz.add(key); const kl = key.length; const kl5 = kl % 5; const kl3 = kl % 3; const kl2 = kl % 2; const kl7 = kl % 7; if (key.indexOf('kevlar_') >= 0) { // if(key==='kevlar_prefetch_data_augments_network_data') continue; if (kl5 === 0 && kl3 === 2 && kl2 === 0) { // home page / watch page icons if (key === 'kevlar_three_dot_ink') continue; if (key === 'kevlar_use_wil_icons') continue; if (key === 'kevlar_home_skeleton') continue; } if (kl5 === 0 && kl3 === 1 && kl2 === 1) { if (key === 'kevlar_fluid_touch_scroll') continue; if (key === 'kevlar_watch_color_update') continue; if (key === 'kevlar_use_vimio_behavior') continue; // home page - channel icon } if (kl3 === 2 && kl5 === 4 && kl2 < 2) { // collapsed meta // no teaser, use latest collapsed meta design if (key === 'kevlar_structured_description_content_inline') continue; if (key === 'kevlar_watch_metadata_refresh') continue; } if (kl5 === 3 && kl3 === 1 && kl2 === 0) { if (key === 'kevlar_watch_js_panel_height') continue; // affect Tabview Youtube } } else { if (kl3 === 0 && kl5 === 2) { // modern menu if (key === 'web_button_rework_with_live') continue; if (key === 'web_fix_fine_scrubbing_drag') continue; } if (kl3 === 1 && kl5 === 4 && kl2 === 1) { // full screen -buggy if (key === 'external_fullscreen') continue; } if (kl3 === 0 && kl5 === 3 && kl2 === 0) { // minimize menu if (key === 'web_modern_buttons') continue; if (key === 'web_modern_dialogs') continue; } } // console.log(key) EXPERIMENT_FLAGS[key] = false; } } } else { for (const [key, value] of Object.entries(EXPERIMENT_FLAGS)) { if (value === true) { // if(key.indexOf('modern')>=0 || key.indexOf('enable')>=0 || key.indexOf('theme')>=0 || key.indexOf('skip')>=0 || key.indexOf('ui')>=0 || key.indexOf('observer')>=0 || key.indexOf('polymer')>=0 )continue; if (mz.has(key)) continue; mz.add(key); // console.log(key) EXPERIMENT_FLAGS[key] = false; } } } EXPERIMENT_FLAGS.desktop_delay_player_resizing = false; EXPERIMENT_FLAGS.web_animated_like = false; EXPERIMENT_FLAGS.web_animated_like_lazy_load = false; // EXPERIMENT_FLAGS.kevlar_prefetch_data_augments_network_data = true; // TBC let isYtLoaded = false; try { isYtLoaded = typeof ytcfg.set === 'function'; } catch (e) { } if (isYtLoaded) { Promise.resolve().then(fhandler); } } } let cid = setInterval(f, 1); (async () => { while (true) { f(); if (fStop) break; await (new Promise(requestAnimationFrame)); } })(); f(); function fhandler() { Promise.resolve().then(() => { fStop = true; cid && clearInterval(cid); cid = 0; }); document.removeEventListener('yt-page-data-fetched', fhandler, false); document.removeEventListener('yt-navigate-finish', fhandler, false); document.removeEventListener('spfdone', fhandler, false); } document.addEventListener('yt-page-data-fetched', fhandler, false); document.addEventListener('yt-navigate-finish', fhandler, false); document.addEventListener('spfdone', fhandler, false); })({ Promise, requestAnimationFrame });