您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Block YouTube ads effectively
// ==UserScript== // @name YouTube Ad Blocker // @namespace http://tampermonkey.net/ // @version 3.0 // @description Block YouTube ads effectively // @author Patrick // @match https://*.youtube.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com // @grant none // @run-at document-start // ==/UserScript== (function() { // Patches the ads for cold loading var ytInitialPlayerResponse = null; function getter() { return ytInitialPlayerResponse; } function setter(data) { ytInitialPlayerResponse = { ...data, adPlacements: [] }; } if (window.ytInitialPlayerResponse) { Object.defineProperty(window.ytInitialPlayerResponse, 'adPlacements', { get: () => [], set: (a) => undefined, configurable: true }); } else { Object.defineProperty(window, 'ytInitialPlayerResponse', { get: getter, set: setter, configurable: true }); } // FETCH POLYFILL (function() { const { fetch: origFetch } = window; window.fetch = async (...args) => { const response = await origFetch(...args); if (response.url.includes('/youtubei/v1/player')) { const text = () => response .clone() .text() .then((data) => data.replace(/adPlacements/, 'odPlacement')); response.text = text; return response; } return response; }; })(); // OTHER STUFF - just in case an ad gets through (function() { window.autoClick = setInterval(function() { try { const btn = document.querySelector('.videoAdUiSkipButton,.ytp-ad-skip-button'); if (btn) { btn.click(); } const ad = document.querySelector('.ad-showing'); if (ad) { document.querySelector('video').playbackRate = 10; } } catch (ex) {} }, 100); window.inlineAdsInterval = setInterval(function() { try { const div = document.querySelector('#player-ads'); if (div) { div.parentNode.removeChild(div); } } catch (ex) {} }, 500); })(); })();