Google Search Results Filter

Hides specific Google search results based on href values. Motivation: I keep wasting my time opening reddit from search results and realizing that I don't have an access there

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

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

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Google Search Results Filter
// @namespace    https://greasyfork.org/en/users/1413127-tumoxep
// @version      1.1
// @description  Hides specific Google search results based on href values. Motivation: I keep wasting my time opening reddit from search results and realizing that I don't have an access there
// @license      WTFPL
// @match        https://www.google.com/search*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // List of keywords or URL substrings to hide
    const blacklist = [
        "air.io",
    ];

    // Function to hide unwanted search results
    function filterResults() {
        // Select all results inside the #search element
        const results = document.querySelectorAll(`[data-hveid]:not([data-hveid=""])[jsaction]:not([jsaction=""])[data-hveid]:not([data-hveid=""])[data-ved]:not([data-ved=""])`); // Adjust if necessary based on class structure

        results.forEach((result) => {
            try {
                // Get the link nested 9 levels deep
                const link = result.querySelector("a");
                if (link && blacklist.some(keyword => link.href.includes(keyword))) {
                    // Hide the result if it matches the blacklist
                    result.style.display = 'none';
                }
            } catch (e) {
                console.error("Error processing result:", e);
            }
        });
    }

    // Run the filter when the page loads or updates
    const observer = new MutationObserver(filterResults);
    observer.observe(document.body, { childList: true, subtree: true });

    // Initial filter run
    filterResults();
})();