Greasy Fork

Greasy Fork is available in English.

隐藏B站充电和广告

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

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

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

(function() {
    'use strict';

    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 checkForContentToHide() {
        const items = document.querySelectorAll('.bili-dyn-list__item');
        let hasHiddenItems = false;
        let hasADItems = false;

        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');

            if (badge && badge.textContent.includes('充电专属')) {
                item.style.display = 'none';
                hasHiddenItems = true;
            } else if (specialTitle && specialTitle.textContent.includes('专属动态')) {
                item.style.display = 'none';
                hasHiddenItems = true;
            } else if (Array.from(spans).some(span =>
                span.textContent.includes('充电专属问答')
            )) {
                item.style.display = 'none';
                hasHiddenItems = true;
            } else if (lotteryTitle && lotteryTitle.textContent.includes('专属抽奖')) {
                item.style.display = 'none';
                hasHiddenItems = true;
            }

            // 检查广告词
            if (contentDiv) {
                const contentText = contentDiv.textContent;
                const containsBlockedKeyword = blockedKeywords.some(keyword =>
                    contentText.includes(keyword)
                );

                if (containsBlockedKeyword) {
                    item.style.display = 'none';
                    hasADItems = true;
                }
            }

            // 检查超链接和广告链接
            spans.forEach(span => {
                const dataUrl = span.getAttribute('data-url');
                if (dataUrl) {
                    const containsBlockedLink = blockedLinks.some(blocked =>
                        dataUrl.includes(blocked)
                    );
                    if (containsBlockedLink) {
                        item.style.display = 'none';
                        hasADItems = true;
                    }
                }
            });
        });

        if (hasHiddenItems) {
            showMessage("充电内容已隐藏");
        } else if (hasADItems) {
            showMessage("广告内容已隐藏");
        }
    }

    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();
})();