Greasy Fork

来自缓存

Greasy Fork is available in English.

包子漫画/TW Manga 弹窗广告屏蔽

屏蔽 #baoziAdPopup 及其相关的弹窗广告

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         包子漫画/TW Manga 弹窗广告屏蔽
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  屏蔽 #baoziAdPopup 及其相关的弹窗广告
// @author       pixel
// @match        *://www.twmanga.com/*
// @match        *://www.baozimh.com/*
// @grant        GM_addStyle
// @run-at       document-start
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // 1. 策略一:CSS 层面直接隐藏 (最为快速,防止闪烁)
    // 针对 ID 和 Class 进行隐藏,且提高优先级
    const css = `
        #baoziAdPopup,
        .baozi-ad,
        .baozi-ad-overlay {
            display: none !important;
            visibility: hidden !important;
            pointer-events: none !important;
            width: 0 !important;
            height: 0 !important;
            z-index: -9999 !important;
        }
    `;
    GM_addStyle(css);

    // 2. 策略二:DOM 层面物理移除 (防止后台脚本继续运行或占用内存)
    function removeAdNode() {
        const adNode = document.getElementById('baoziAdPopup');
        if (adNode) {
            adNode.remove();
            console.log('[AdBlock] 已移除广告节点: #baoziAdPopup');
        }

        // 移除可能存在的遮罩层(如果有的话,通常广告会有配套的 overlay)
        const overlays = document.querySelectorAll('.baozi-ad-overlay');
        overlays.forEach(el => el.remove());
    }

    // 页面加载时尝试移除
    removeAdNode();

    // 3. 策略三:监听 DOM 变化 (应对异步加载/SPA切换)
    const observer = new MutationObserver((mutations) => {
        // 简单粗暴的检测,避免遍历 mutations 带来的性能损耗,直接尝试获取 ID
        removeAdNode();
    });

    // 开始监听 body 的子节点变化
    if (document.body) {
        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    } else {
        // 如果脚本运行过早,body 还没生成,则等待 DOMContentLoaded
        document.addEventListener('DOMContentLoaded', () => {
            removeAdNode();
            observer.observe(document.body, {
                childList: true,
                subtree: true
            });
        });
    }

})();