Twitch 廣告封鎖提示自動消除腳本

自動隱藏 Twitch 上「請關閉廣告封鎖軟體」的提示及其背景疊層,讓您能順暢觀看直播,同時不影響播放控制項。

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Twitch 廣告封鎖提示自動消除腳本
// @name:en      Twitch Adblock Warning Auto-Remover
// @name:zh-CN   Twitch 广告屏蔽警告自动移除脚本
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  自動隱藏 Twitch 上「請關閉廣告封鎖軟體」的提示及其背景疊層,讓您能順暢觀看直播,同時不影響播放控制項。
// @description:zh-CN   自动隐藏 Twitch 上弹出的“请关闭广告屏蔽软件”警告,并尝试保留播放控件。
// @description:en  Automatically hides the "Please disable ad blocker" warning on Twitch, attempting to preserve player controls.
// @match        https://www.twitch.tv/*
// @author       オーウェル緑 using Gemini
// @license      MIT
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Define CSS selectors for the ad warning elements to be hidden.
    // To avoid accidentally hiding player controls, these selectors are more precise.
    // If the script stops working, please use F12 Developer Tools to inspect and update these selectors.
    const selectorsToHide = [
        // This is the most direct data attribute for adblock warnings, if used, it's the most precise target.
        '[data-a-target="ad-block-warning"]',

        // This is the main content container for the ad warning message, based on the HTML structure you provided.
        // It contains text, buttons, etc.
        '.Layout-sc-1xcs6mc-0.boHJDp',

        // This is the dark background overlay for the ad warning, which usually appears with the ad warning content.
        // Its class names include 'player-overlay-background' and 'darkness-3', which seem specific to this warning's background.
        '.Layout-sc-1xcs6mc-0.bmlSdB.player-overlay-background.player-overlay-background--darkness-3'
    ];

    /**
     * Attempts to hide the specified element.
     * @param {string} selector - The CSS selector of the element to find and hide.
     */
    function hideElement(selector) {
        const element = document.querySelector(selector);
        if (element) {
            // Enhance hiding effect: set display, opacity, and visibility simultaneously.
            // Use !important to try and override Twitch's own styles.
            element.style.setProperty('display', 'none', 'important');
            element.style.setProperty('opacity', '0', 'important');
            element.style.setProperty('visibility', 'hidden', 'important');
            console.log(`Twitch Warning: Element '${selector}' hidden (enhanced hiding)`);
            return true; // Indicates element was found and hidden
        }
        return false; // Indicates element was not found
    }

    /**
     * Checks for and hides all defined ad warning elements.
     * Returns true if any elements were found and hidden.
     */
    function checkAndHideWarnings() {
        let hiddenCount = 0;
        for (const selector of selectorsToHide) {
            if (hideElement(selector)) {
                hiddenCount++;
            }
        }
        return hiddenCount > 0;
    }

    // Use MutationObserver to listen for changes in the DOM tree.
    // This is because ad warnings might not be present when the page loads, but are injected dynamically.
    const observer = new MutationObserver((mutationsList, observerInstance) => {
        // Attempt to check and hide warnings every time the DOM changes.
        // We keep it observing continuously to handle warnings that might appear multiple times on Twitch pages.
        checkAndHideWarnings();
    });

    // Configure the observer to watch for changes in child nodes and subtree of the entire document.body.
    // childList: Observe additions or removals of child nodes.
    // subtree: Observe changes in all descendant nodes.
    observer.observe(document.body, { childList: true, subtree: true });

    // Also perform an immediate check when the page loads, in case the warning is present before the observer starts.
    window.addEventListener('load', checkAndHideWarnings);
    // Consider also triggering on DOMContentLoaded for elements that might exist earlier.
    document.addEventListener('DOMContentLoaded', checkAndHideWarnings);

    console.log('Twitch Adblock Warning Auto-Remover script started.');

})();