Greasy Fork

Greasy Fork is available in English.

去你妈的批站诈骗广告

bilibili,B站,去广告,屏蔽小火箭推广视频,屏蔽首页左侧大图滑动推荐栏,屏蔽直播主页自动播放的直播广告

目前为 2025-03-27 提交的版本。查看 最新版本

// ==UserScript==
// @name         去你妈的批站诈骗广告
// @version      1.7
// @description  bilibili,B站,去广告,屏蔽小火箭推广视频,屏蔽首页左侧大图滑动推荐栏,屏蔽直播主页自动播放的直播广告
// @author       爆菊大师
// @match        *://*.bilibili.com/*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        none
// @license MIT
// @namespace http://tampermonkey.net/
// ==/UserScript==

(function () {
    'use strict';
    const selectors = {
        pseudo: '.bili-video-card.is-rcmd',
        icons: '.vui_icon.bili-video-card__stats--icon',
        adFeed: '.bili-video-card__mask .bili-video-card__stats--text'
    };
    const style = document.createElement('style');
    style.textContent = `
        /* live */
        .player-area-ctnr.border-box.p-relative.t-center,
        /* video */
        .ad-report.ad-floor-exp.right-bottom-banner,
        .activity-m-v1.act-end,
        .activity-m-v1.act-now,
        .video-card-ad-small,
        .video-page-game-card-small,
        .slide-ad-exp,
         /* home */
        .recommended-swipe.grid-anchor,
        .bili-live-card.is-rcmd.enable-no-interest,
        .ad-report.ad-floor-exp.left-banner,
        .floor-single-card,
        .fixed-card { display: none !important; }
        .feed-card { margin-top: 0 !important; }
    `;
    document.head.appendChild(style);
    const isLiveHome = () =>
        location.host === 'live.bilibili.com' &&
        location.pathname === '/';
    const handleLiveStream = () => {
        const video = document.querySelector('video');
        if (!video) return false;
        video.pause();
        video.currentTime = 0;
        video.autoplay = false;
        var container = document.querySelector('.player-area-ctnr');
        if (container) container.remove();
        return true;
    };
    let liveObserver;
    if (isLiveHome()) {
        liveObserver = new MutationObserver(mutations => {
            if (handleLiveStream()) {
                liveObserver.disconnect();
            }
        });
        liveObserver.observe(document.body, {
            childList: true,
            subtree: true
        });
        if (handleLiveStream()) {
            liveObserver.disconnect();
        }
    }
    function runAllChecks() {
        checkElements(selectors.pseudo, el =>
            isBlocked(el) || Array.from(el.children).some(isBlocked)
        );
        checkElements(selectors.icons, null, '.bili-video-card');
        checkElements(selectors.adFeed, el =>
            el.textContent.includes('广告'), '.bili-video-card__wrap'
        );
    }
    function hideElement(element) {
        if (element.dataset.processed) return;
        element.style.display = 'none';
        element.dataset.processed = 'true';
    }
    function isBlocked(element) {
        if (element.dataset.checked) return element.dataset.blocked === 'true';
        const content = window.getComputedStyle(element, '::before').content;
        const blocked = content.includes('AdGuard') || content.includes('AdBlock');
        element.dataset.checked = 'true';
        element.dataset.blocked = blocked;
        return blocked;
    }
    function checkElements(selector, condition, parentSelector) {
        document.querySelectorAll(selector).forEach(el => {
            const target = parentSelector ? el.closest(parentSelector) : el;
            if (target && (!condition || condition(el))) hideElement(target);
        });
    }
    const debounce = (fn, delay = 100) => {
        let timeout;
        return (...args) => {
            clearTimeout(timeout);
            timeout = setTimeout(() => fn(...args), delay);
        };
    };
    const observer = new MutationObserver(debounce(runAllChecks));
    observer.observe(document.body, { subtree: true, childList: true });
    runAllChecks();
})();