您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Remove github's recommendation/trending cards in the dashboard thread. It's triggered by HTML change, usually takes 5ms in PC Chrome browser.
// ==UserScript== // @name Github recommendation blocker // @namespace http://tampermonkey.net/ // @version 2025-04-30_2 // @description Remove github's recommendation/trending cards in the dashboard thread. It's triggered by HTML change, usually takes 5ms in PC Chrome browser. // @author dont-be-evil // @match https://github.com/ // @icon https://www.google.com/s2/favicons?sz=64&domain=github.com // @grant none // @license GPLv3 // ==/UserScript== (function() { 'use strict'; document.querySelectorAll('h2').forEach(h2 => { console.log(h2.textContent.trim()); if (h2.textContent.trim() === "Explore repositories") { h2.parentElement.remove(); } }); const keywords = ["Recommended for you", "Based on", "Popular among", "Popular projects among", ... "Trending repositories"]; const observer = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { // Ensure it's an element node.querySelectorAll('h5').forEach(h5 => { if (keywords.some(keyword => h5.textContent.includes(keyword))) { let parent = h5; for (let i = 0; i < 5; i++) { if (parent.parentElement) { parent = parent.parentElement; } else { return; // Exit if there are fewer than 5 ancestors } } parent.remove(); } }); } }); }); }); // Observe the whole document, including subtree modifications observer.observe(document, { childList: true, subtree: true }); // Function to observe shadow DOM elements function observeShadowRoots(node) { if (node.shadowRoot) { observer.observe(node.shadowRoot, { childList: true, subtree: true }); } } // Observe shadow DOM elements dynamically added const shadowObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { if (node.nodeType === 1) { // Ensure it's an element observeShadowRoots(node); } }); }); }); // Start observing for new shadow DOM elements shadowObserver.observe(document, { childList: true, subtree: true }); })();