Greasy Fork

Greasy Fork is available in English.

隐藏B站充电和广告

隐藏B站动态瀑布流中的广告和充电内容

当前为 2024-10-12 提交的版本,查看 最新版本

// ==UserScript==
// @name         隐藏B站充电和广告
// @version      1.16
// @description  隐藏B站动态瀑布流中的广告和充电内容
// @author       chemhunt
// @match        https://t.bilibili.com/*
// @match        https://space.bilibili.com/*
// @grant        none
// @license      GPL-3.0 License
// @namespace    http://greasyfork.icu/scripts/511437/
// ==/UserScript==

(function() {
    'use strict';

    //白名单UP主,可自行修改、增删
    const whiteList = [
        '白名单UP_1', '白名单UP_2',
    ];

    const messageDiv = document.createElement('div');
    Object.assign(messageDiv.style, {
        position: 'fixed',
        top: '10px',
        right: '10px',
        padding: '10px',
        backgroundColor: 'rgba(0, 0, 0, 0.7)',
        color: 'white',
        borderRadius: '5px',
        zIndex: '9999',
        display: 'none'
    });

    document.body.appendChild(messageDiv);

    const blockedKeywords = [
        '拼多多', '淘宝', '京东', '天猫', '手淘', '旗舰店',
        '特价', '领券', '下单', '礼包', '补贴', '优惠', '双11', '618',
        '溪木源', '海力生', '萌牙家', '妙界', 'DAWEI', '温眠', '护肝', '护颈', '护枕', '按摩', '冲牙器',
        //'中奖', '预告', '抽奖',
    ];

    const blockedLinks = [
        'taobao.com', 'jd.com', 'pinduoduo.com',
    ];


    function hideItem(item) {
        item.style.display = 'none';
    }

    function checkForContentToHide() {
        const items = document.querySelectorAll('.bili-dyn-list__item');
        let hiddenChargeCount = 0;
        let hiddenAdCount = 0;

        items.forEach(item => {
            const contentDiv = item.querySelector('.bili-dyn-content');
            const badge = item.querySelector('.bili-dyn-card-video__badge');
            const specialTitle = item.querySelector('.dyn-blocked-mask__msg-title');
            const spans = item.querySelectorAll('span');
            const lotteryTitle = item.querySelector('.dyn-upower-lottery__title');
            const titleElement = item.querySelector('.bili-dyn-title');

            // 检查UP名字是否在白名单中
            if (titleElement && whiteList.includes(titleElement.textContent.trim())) {
                return; 
            }

            if (badge && badge.textContent.includes('充电专属') ||
                specialTitle && specialTitle.textContent.includes('专属动态') ||
                Array.from(spans).some(span => span.textContent.includes('充电专属问答')) ||
                lotteryTitle && lotteryTitle.textContent.includes('专属抽奖')) {
                hideItem(item);
                hiddenChargeCount++;
            } else if (contentDiv) {
                const contentText = contentDiv.textContent;
                if (blockedKeywords.some(keyword => contentText.includes(keyword))) {
                    hideItem(item);
                    hiddenAdCount++;
                }
            }

            spans.forEach(span => {
                const dataUrl = span.getAttribute('data-url');
                if (dataUrl && blockedLinks.some(blocked => dataUrl.includes(blocked))) {
                    hideItem(item);
                    hiddenAdCount++;
                }
            });
        });

        // 显示隐藏的内容数量
        let message = '';
        if (hiddenChargeCount > 0) {
            message += `隐藏充电 x ${hiddenChargeCount} `;
        }
        if (hiddenAdCount > 0) {
            message += `隐藏广告 x ${hiddenAdCount}`;
        }

        if (message) {
            showMessage(message.trim());
        }
    }

    function showMessage(msg) {
        messageDiv.textContent = msg;
        messageDiv.style.display = 'block';
        setTimeout(() => {
            messageDiv.style.display = 'none';
        }, 3000);
    }

    const observer = new MutationObserver(checkForContentToHide);
    observer.observe(document.body, {
        childList: true, subtree: true
    });

    checkForContentToHide();
})();