您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically hide posts that match keywords from Lemmy sites.
// ==UserScript== // @name Lemmy Post Keyword Filter // @namespace https://zetaphor.com/ // @homepageURL https://github.com/Zetaphor/lemmy-keyword-filter // @supportURL https://github.com/Zetaphor/lemmy-keyword-filter/issues // @version 1.1 // @license WTFPL // @description Automatically hide posts that match keywords from Lemmy sites. // @author Zetaphor // @grant GM_getValue // @grant GM_setValue // @grant GM_registerMenuCommand // @run-at document-end // @match *://*/* // ==/UserScript== (function () { 'use strict'; // Check if the main Lemmy selector is present const lemmySelectorPresent = document.querySelector('#app.lemmy-site'); if (!lemmySelectorPresent) { console.log('Not a Lemmy site. Script will not run.'); return; } // Function to hide the post element and the preceding <hr> tag function hidePost(postElement) { postElement.style.display = 'none'; const precedingHR = postElement.previousElementSibling; if (precedingHR && precedingHR.tagName === 'HR') { precedingHR.style.display = 'none'; } } // Function to check if the post title contains any of the keywords function checkKeywords(postElement, keywords) { const postTitle = postElement.querySelector('.post-title span'); if (!postTitle) return; const titleText = postTitle.innerText.toLowerCase(); for (const keyword of keywords) { if (titleText.includes(keyword.toLowerCase())) { hidePost(postElement); break; } } } // Main function to apply the keyword filtering function filterPostsByKeywords(keywords) { // Do nothing if the keyword list is empty if (keywords.length === 0) return; const postListings = document.querySelectorAll('.post-listing'); postListings.forEach((postElement) => { checkKeywords(postElement, keywords); }); } // Settings page to edit the list of keywords function createSettingsPage() { const settingsHTML = ` <div> <h2 style="color: white;">Lemmy Keyword Filter Settings</h2> <label for="keyword-list" style="color: white;">Enter keywords (comma-separated):</label> <br> <input type="text" id="keyword-list" style="width: 300px;" value=""> <br><br> <button id="save-button">Save</button> </div> `; const popupDiv = document.createElement('div'); popupDiv.style.position = 'fixed'; popupDiv.style.top = '20%'; popupDiv.style.left = '20%'; popupDiv.style.width = '60%'; popupDiv.style.backgroundColor = 'grey'; popupDiv.style.color = 'white'; popupDiv.style.padding = '20px'; popupDiv.innerHTML = settingsHTML; document.body.appendChild(popupDiv); const saveButton = document.getElementById('save-button'); const keywordListInput = document.getElementById('keyword-list'); // Load the saved keywords and display them in the input field const savedKeywords = GM_getValue('lemmyKeywords', []); keywordListInput.value = savedKeywords.join(', '); // Save the keywords when the Save button is clicked saveButton.addEventListener('click', () => { let keywords = keywordListInput.value.split(',').map((keyword) => keyword.trim()); keywords = keywords.filter(keyword => keyword.length > 0); // filter out empty strings GM_setValue('lemmyKeywords', keywords); filterPostsByKeywords(keywords); popupDiv.remove(); // Close the settings page after saving }); } // Function to open the settings page function openSettingsPage() { createSettingsPage(); } // Add the settings page option to the Tampermonkey menu GM_registerMenuCommand('Lemmy Keyword Filter Settings', openSettingsPage); // Get the saved keywords and apply the filtering const savedKeywords = GM_getValue('lemmyKeywords', []); filterPostsByKeywords(savedKeywords); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址