您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Blocks All twitch ads 100% of the time! Never view another ad! (UPDATED) - Haven't tested, so may or may not work.
// ==UserScript== // @name Twitch Ad blocker // @namespace http://tampermonkey.net/ // @version V9 // @description Blocks All twitch ads 100% of the time! Never view another ad! (UPDATED) - Haven't tested, so may or may not work. // @author NotYou (Gabriel Underwood) // @match https://www.twitch.tv/* // @grant none // ==/UserScript== (function() { 'use strict'; // Function to check if element contains ad blocker detection text function hasAdBlockerText(element) { const text = element.textContent.toLowerCase(); return text.includes('remove') || text.includes('ad blocker') || text.includes('adblocker') || text.includes('disable your ad blocker') || text.includes('turn off ad blocker') || text.includes('please disable') || text.includes('detected ad blocker'); } // Function to check if element is a legitimate overlay (chat, controls, etc.) function isLegitimateOverlay(element) { const classList = element.className.toLowerCase(); const id = element.id.toLowerCase(); // Allow chat and overlay controls const allowedPatterns = [ 'chat', 'control', 'button', 'menu', 'tooltip', 'dropdown', 'modal', 'notification', 'alert', 'popup-menu', 'context-menu', 'player-controls', 'stream-info', 'follow-button', 'subscribe-button' ]; return allowedPatterns.some(pattern => classList.includes(pattern) || id.includes(pattern) ); } // Function to check if element is covering significant screen area function isCoveringScreen(element) { const rect = element.getBoundingClientRect(); const viewport = { width: window.innerWidth, height: window.innerHeight }; // Consider it covering if it's large and positioned absolutely/fixed const style = window.getComputedStyle(element); const isOverlay = style.position === 'fixed' || style.position === 'absolute'; const isLarge = rect.width > viewport.width * 0.3 || rect.height > viewport.height * 0.3; const isFullScreen = rect.width > viewport.width * 0.8 && rect.height > viewport.height * 0.8; return isOverlay && (isLarge || isFullScreen); } // Main function to remove unwanted overlays function removeUnwantedOverlays() { const allElements = document.querySelectorAll('*'); allElements.forEach(element => { // Instantly remove anything with ad blocker detection text if (hasAdBlockerText(element)) { console.log('Removed ad blocker detection element:', element); element.remove(); return; } // Remove elements covering the screen that aren't legitimate overlays if (isCoveringScreen(element) && !isLegitimateOverlay(element)) { // Additional check for common ad overlay patterns const classList = element.className.toLowerCase(); const suspiciousPatterns = [ 'overlay', 'interstitial', 'banner', 'popup', 'modal', 'dialog' ]; const isSuspicious = suspiciousPatterns.some(pattern => classList.includes(pattern)); if (isSuspicious) { console.log('Removed suspicious overlay:', element); element.remove(); } } }); } // Run immediately removeUnwantedOverlays(); // Run when DOM is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', removeUnwantedOverlays); } // Run when page is fully loaded window.addEventListener('load', removeUnwantedOverlays); // Continuously monitor for new elements (ads can be dynamically loaded) const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { mutation.addedNodes.forEach((node) => { if (node.nodeType === 1) { // Element node // Check the new node itself if (hasAdBlockerText(node)) { console.log('Removed new ad blocker detection element:', node); node.remove(); return; } if (isCoveringScreen(node) && !isLegitimateOverlay(node)) { console.log('Removed new overlay element:', node); node.remove(); return; } // Check children of the new node const children = node.querySelectorAll('*'); children.forEach(child => { if (hasAdBlockerText(child)) { console.log('Removed nested ad blocker detection element:', child); child.remove(); } else if (isCoveringScreen(child) && !isLegitimateOverlay(child)) { console.log('Removed nested overlay element:', child); child.remove(); } }); } }); }); }); // Start observing observer.observe(document.body || document.documentElement, { childList: true, subtree: true }); // Also run periodically as a backup setInterval(removeUnwantedOverlays, 2000); console.log('Twitch Screen Overlay Blocker is active'); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址