Spoiler Protection for tampermonkey

Apply a black box to elements containing specific keywords on web pages, including dynamically loaded content when scrolling

Du musst eine Erweiterung wie Tampermonkey, Greasemonkey oder Violentmonkey installieren, um dieses Skript zu installieren.

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

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

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

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

Sie müssten eine Skript Manager Erweiterung installieren damit sie dieses Skript installieren können

(Ich habe schon ein Skript Manager, Lass mich es installieren!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Spoiler Protection for tampermonkey
// @namespace    http://tampermonkey.net/
// @version      1.0.1
// @description  Apply a black box to elements containing specific keywords on web pages, including dynamically loaded content when scrolling
// @author       Your Name
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Define your customizable keywords here
    const keywordsToMatch = ['keyword1', '網', '有片', '恐', '崩潰', '這一件', '這件', '竟然', '揪', '揭', '傻眼', '網', '曝', '爆', '驚'];

    // Define the black box CSS style
    const blackBoxStyle = `
        background-color: black !important;
        color: grey !important;
        font-size: 10pt !important;
    `;

    // Function to apply black box to elements containing keywords
    function applyBlackBoxToElements() {
        const allTextNodes = document.createTreeWalker(
            document.body,
            NodeFilter.SHOW_TEXT,
            null,
            false
        );

        for (let textNode; (textNode = allTextNodes.nextNode()); ) {
            const text = textNode.textContent.toLowerCase();
            for (const keyword of keywordsToMatch) {
                if (text.includes(keyword.toLowerCase())) {
                    const parentElement = textNode.parentElement;
                    if (parentElement) {
                        parentElement.style.cssText += blackBoxStyle;
                        //parentElement.style.backgroundColor = 'black';
                        //parentElement.style.color = 'white';
                        //parentElement.textContent = '______"'+keyword+'"______'; // Replace with your preferred text
                    }
                    break; // No need to check other keywords for this text node
                }
            }
        }
    }

    // Function to observe and apply black box to newly added content
    function observeAndApplyBlackBox() {
        const observer = new MutationObserver(function(mutations) {
            for (const mutation of mutations) {
                if (mutation.addedNodes.length > 0) {
                    applyBlackBoxToElements();
                }
            }
        });

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

    // Function to handle scroll events and apply black box to new content
    function handleScroll() {
        window.addEventListener('scroll', function() {
            applyBlackBoxToElements();
        });
    }

    // Main function to process the webpage
    function processPage() {
        applyBlackBoxToElements();
        observeAndApplyBlackBox();
        handleScroll();
    }

    // Run the script
    processPage();
})();