您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在 freesmth.net 上屏蔽指定用户的帖子
- // ==UserScript==
- // @name Freesmth User Blocker
- // @namespace http://tampermonkey.net/
- // @version 1.2
- // @description 在 freesmth.net 上屏蔽指定用户的帖子
- // @author
- // @match https://freesmth.net/*
- // @match https://freesmth.uk/*
- // @grant GM_getValue
- // @grant GM_setValue
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- // 从存储中加载屏蔽的用户列表
- let blockedUsers = GM_getValue('blockedUsers', []);
- // 处理并修改帖子
- function processPost(postElement) {
- // 避免重复处理同一帖子
- if (postElement.getAttribute('data-processed')) {
- return;
- }
- postElement.setAttribute('data-processed', 'true');
- // 查找用户名元素
- let usernameElement = postElement.querySelector('.PostUser-name .username');
- if (!usernameElement) return; // 如果找不到用户名,则跳过此帖子
- let username = usernameElement.textContent.trim();
- // 在用户名后添加或更新“隐藏/显示”按钮
- addToggleButton(usernameElement, username);
- // 检查用户是否被屏蔽
- if (blockedUsers.includes(username)) {
- // 隐藏帖子内容
- hidePostContent(postElement);
- // 将按钮文字设置为“显示”
- setToggleButtonCaption(usernameElement, '显示');
- } else {
- // 显示帖子内容
- showPostContent(postElement);
- // 将按钮文字设置为“隐藏”
- setToggleButtonCaption(usernameElement, '隐藏');
- }
- }
- // 隐藏帖子内容
- function hidePostContent(postElement) {
- // 隐藏帖子正文和操作
- let postBody = postElement.querySelector('.Post-body');
- if (postBody) postBody.style.display = 'none';
- let postActions = postElement.querySelector('.Post-actions');
- if (postActions) postActions.style.display = 'none';
- }
- // 显示帖子内容
- function showPostContent(postElement) {
- // 显示帖子正文和操作
- let postBody = postElement.querySelector('.Post-body');
- if (postBody) postBody.style.display = '';
- let postActions = postElement.querySelector('.Post-actions');
- if (postActions) postActions.style.display = '';
- }
- // 在用户名后添加或更新“隐藏/显示”按钮
- function addToggleButton(usernameElement, username) {
- // 检查按钮是否已存在
- let h3Element = usernameElement.closest('.PostUser-name');
- if (!h3Element) return;
- let existingButton = h3Element.querySelector('.toggleUserButton');
- if (existingButton) {
- // 更新事件处理器以确保使用正确的用户名
- existingButton.removeEventListener('click', existingButton.handlerReference);
- existingButton.handlerReference = function(e) {
- e.stopPropagation();
- e.preventDefault();
- toggleUser(username);
- };
- existingButton.addEventListener('click', existingButton.handlerReference);
- } else {
- // 创建按钮
- let toggleButton = document.createElement('button');
- toggleButton.className = 'toggleUserButton';
- toggleButton.style.marginLeft = '5px';
- toggleButton.handlerReference = function(e) {
- e.stopPropagation(); // 阻止事件冒泡
- e.preventDefault(); // 阻止默认行为
- toggleUser(username);
- };
- toggleButton.addEventListener('click', toggleButton.handlerReference);
- // 在用户名后添加按钮
- h3Element.appendChild(toggleButton);
- }
- }
- // 设置按钮文字
- function setToggleButtonCaption(usernameElement, caption) {
- let h3Element = usernameElement.closest('.PostUser-name');
- if (!h3Element) return;
- let toggleButton = h3Element.querySelector('.toggleUserButton');
- if (toggleButton) {
- toggleButton.textContent = caption;
- }
- }
- // 切换用户的屏蔽状态
- function toggleUser(username) {
- if (blockedUsers.includes(username)) {
- // 用户当前被屏蔽,解除屏蔽
- blockedUsers = blockedUsers.filter(u => u !== username);
- } else {
- // 用户未被屏蔽,添加到屏蔽列表
- blockedUsers.push(username);
- }
- GM_setValue('blockedUsers', blockedUsers);
- // 重新处理所有帖子以更新显示
- processAllPosts();
- }
- // 处理页面上的所有帖子
- function processAllPosts() {
- let posts = document.querySelectorAll('.PostStream-item .Post');
- posts.forEach(function(postElement) {
- // 移除处理标记
- postElement.removeAttribute('data-processed');
- });
- // 处理每个帖子
- posts.forEach(function(postElement) {
- processPost(postElement);
- });
- }
- // 初始处理帖子
- processAllPosts();
- // 观察 DOM,处理动态加载的帖子(无限滚动)
- const observer = new MutationObserver(function(mutationsList) {
- mutationsList.forEach(function(mutation) {
- mutation.addedNodes.forEach(function(node) {
- if (node.nodeType !== Node.ELEMENT_NODE) return;
- let posts = [];
- if (node.matches('.PostStream-item .Post')) {
- posts.push(node);
- } else {
- posts = node.querySelectorAll('.PostStream-item .Post');
- }
- posts.forEach(function(postElement) {
- processPost(postElement);
- });
- });
- });
- });
- observer.observe(document.body, { childList: true, subtree: true });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址