您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
为豆瓣评论添加管理功能并高亮/隐藏用户的评论
// ==UserScript== // @name 保护精力-豆瓣小组评论隐藏 // @namespace http://tampermonkey.net/ // @version 1.1 // @description 为豆瓣评论添加管理功能并高亮/隐藏用户的评论 // @author 不愿透露姓名的妈宝男 // @match *://*.douban.com/* // @grant GM_setValue // @grant GM_getValue // @grant GM_addStyle // @license MIT // ==/UserScript== (function() { 'use strict'; var highlightedUserIds = GM_getValue('highlightedUserIds', []); function addButtons() { document.querySelectorAll('li.comment-item').forEach(comment => { if (!comment.dataset.hasButtons) { var authorId = comment.getAttribute('data-author-id'); var blockButton = document.createElement('button'); blockButton.textContent = '不看他'; blockButton.addEventListener('click', function() { addToBlockList(authorId); refreshCommentsVisibility(); // 刷新页面上所有评论的可见性 }); var unblockButton = document.createElement('button'); unblockButton.textContent = '解除不看'; unblockButton.addEventListener('click', function() { removeFromBlockList(authorId); refreshCommentsVisibility(); // 刷新页面上所有评论的可见性 }); comment.prepend(unblockButton); comment.prepend(blockButton); // 注意顺序,这确保blockButton最终位于unblockButton前面 comment.dataset.hasButtons = true; // 检查是否需要立即应用高亮/隐藏样式 if (highlightedUserIds.includes(authorId)) { updateCommentStyle(comment, 'block'); } } }); } function addToBlockList(authorId) { if (!highlightedUserIds.includes(authorId)) { highlightedUserIds.push(authorId); GM_setValue('highlightedUserIds', highlightedUserIds); } } function removeFromBlockList(authorId) { highlightedUserIds = highlightedUserIds.filter(id => id !== authorId); GM_setValue('highlightedUserIds', highlightedUserIds); } function refreshCommentsVisibility() { document.querySelectorAll('li.comment-item').forEach(comment => { var authorId = comment.getAttribute('data-author-id'); if (highlightedUserIds.includes(authorId)) { updateCommentStyle(comment, 'block'); } else { updateCommentStyle(comment, 'unblock'); } }); } function updateCommentStyle(comment, action) { if (action === 'block') { Array.from(comment.children).forEach(child => { if (child.tagName !== 'BUTTON' && !child.classList.contains('user-face')) { child.style.visibility = 'hidden'; } }); comment.style.backgroundColor = 'white'; comment.style.border = '1px dashed black'; // 添加红色虚线边框 } else { Array.from(comment.children).forEach(child => { child.style.visibility = ''; }); comment.style.backgroundColor = ''; } } var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { mutation.addedNodes.forEach(function(node) { if (node.nodeType === 1 && node.matches('li.comment-item')) { addButtons(); } }); }); }); var config = { childList: true, subtree: true }; observer.observe(document.body, config); addButtons(); // 初始调用以添加按钮到现有评论 GM_addStyle(` button { background: none; color: #f0f0f0; border: none; padding: 0; font: inherit; cursor: pointer; display: inline; margin-right: 4px; // 在按钮之间添加右边距 } button:hover { text-decoration: none; } `); })();