您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Block words, phrases and images associated with those phrases. For the UI to add and delete words and phrases to block, please also install the following, https://greasyfork.org/en/scripts/481834-word-and-image-blocker-settings-ui
- // ==UserScript==
- // @name Word and Image Blocker
- // @namespace https://github.com/def-initive/
- // @version 1.1
- // @description Block words, phrases and images associated with those phrases. For the UI to add and delete words and phrases to block, please also install the following, https://greasyfork.org/en/scripts/481834-word-and-image-blocker-settings-ui
- // @author def-initive
- // @match *://*/*
- // @exclude *://github.com/*
- // @exclude *://greasyfork.org/*
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function () {
- 'use strict';
- // Function to hide images in element, its parents, and siblings
- function hideImagesInElementAndSiblings(element) {
- // Hide images in the element itself
- var imagesInElement = element.querySelectorAll('img');
- imagesInElement.forEach(function (image) {
- image.style.display = "none";
- });
- // Hide images in siblings
- var siblings = Array.from(element.parentElement.children);
- siblings.forEach(function (sibling) {
- if (sibling !== element) {
- var imagesInSibling = sibling.querySelectorAll('img');
- imagesInSibling.forEach(function (image) {
- image.style.display = "none";
- });
- }
- });
- }
- // Function to hide direct parent containers and their siblings' images
- // containing occurrences of a phrase on a webpage
- function hideParentAndSiblings(phrase) {
- var textNodes = document.createTreeWalker(
- document.body,
- NodeFilter.SHOW_TEXT,
- null,
- false
- );
- var elementsToRemove = [];
- while (textNodes.nextNode()) {
- var textNode = textNodes.currentNode;
- var match = textNode.nodeValue.match(new RegExp(phrase, 'gi'));
- if (match) {
- var parentContainer = textNode.parentElement;
- elementsToRemove.push(parentContainer);
- }
- }
- elementsToRemove.forEach(function (element) {
- // Check if the element is part of the UI created by "Blocked Phrases Settings"
- if (!element.closest('.blocked-phrases-settings-container')) {
- // Hide parent containers
- element.style.color = "black";
- element.style.backgroundColor = "black";
- // Hide images in siblings
- hideImagesInElementAndSiblings(element);
- }
- });
- }
- // Load target phrases from local storage
- var storedPhrases = localStorage.getItem('blockedPhrases');
- var targetPhrases = storedPhrases ? JSON.parse(storedPhrases) : [];
- // Hide direct parent containers and images in their siblings
- targetPhrases.forEach(function (phrase) {
- hideParentAndSiblings(phrase);
- });
- // Observe changes in the DOM to handle dynamically loaded content
- var observer = new MutationObserver(function (mutations) {
- mutations.forEach(function (mutation) {
- if (mutation.addedNodes && mutation.addedNodes.length > 0) {
- targetPhrases.forEach(function (phrase) {
- hideParentAndSiblings(phrase);
- });
- }
- });
- });
- // Configuration of the observer
- var observerConfig = {
- childList: true,
- subtree: true
- };
- // Start observing the DOM
- observer.observe(document.body, observerConfig);
- })();