Greasy Fork is available in English.
To Disable all YouTube EXPERIMENT_FLAGS
当前为
// ==UserScript==
// @name Disable all YouTube EXPERIMENT_FLAGS
// @namespace UserScripts
// @match https://www.youtube.com/*
// @version 0.1.3
// @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__) => {
const DISABLE_CINEMATICS = FALSE;
// cinematic feature is no longer an experimential feature.
// It has been officially implemented.
// To disable cinematics, the user shall use other userscripts or just turn off the option in the video options.
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 (!DISABLE_CINEMATICS) {
let cineKey = key === 'enable_cinematic_blur_desktop_loading' ? 1
: key === 'kevlar_watch_cinematics' ? 2
: key === 'web_cinematic_masthead' ? 3
: key === 'web_watch_cinematics_preferred_reduced_motion_default_disabled' ? 4 : 0;
if (cineKey > 0) {
return;
}
}
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 (kl5 === 1 && kl3 === 0 && kl2 === 1 && kl7 === 0) {
if (key === 'web_darker_dark_theme') return; // it also affect cinemtaics
}
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;
}
if (kl3 === 1 && kl5 === 0 && kl7 === 5 && kl2 === 0) { // Tabview Youtube - multiline transcript
if (key === 'enable_mixed_direction_formatted_strings') 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 });