您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
为饭否网页端加入了本地屏蔽功能,只要消息转发链中包含屏蔽列表中的用户,就能屏蔽那条消息。(暂时不能考虑因为消息过长被挤掉的用户)
当前为
// ==UserScript== // @name Fanfou Local Blacklist // @namespace http://tampermonkey.net/ // @version 0.7 // @description 为饭否网页端加入了本地屏蔽功能,只要消息转发链中包含屏蔽列表中的用户,就能屏蔽那条消息。(暂时不能考虑因为消息过长被挤掉的用户) // @author You // @include http://www.fanfou.com/* // @include http://fanfou.com/* // @grant GM_getValue // @grant GM_setValue // @run-at document-end // ==/UserScript== (function() { 'use strict'; var list = GM_getValue('blacklist'); if (!list) list = '[]'; list = JSON.parse(list); list = list.map(id => decodeURIComponent(id)); if (window.location.pathname != '/home' && window.location.pathname != '/mentions') { var url = decodeURIComponent(window.location.pathname); var blocked = list.includes(url); var actions = document.querySelector('#panel .actions'); if (actions === null) actions = document.querySelector('#profile-protected .actions'); var addButton = document.createElement('a'); addButton.href = 'javascript:void(0);'; var setButton = function(b) { addButton.className = b?'bl':'bh'; addButton.text = b?'取消屏蔽':'本地屏蔽'; }; var clicking = false; addButton.onclick = function(e) { if (clicking) return false; clicking = true; if (blocked) { var index = list.indexOf(url); list.splice(index, 1); } else { list.push(url); } blocked = !blocked; setButton(blocked); GM_setValue('blacklist', JSON.stringify(list)); clicking = false; }; setButton(blocked); actions.appendChild(addButton); } else { var target = document.querySelector('#stream ol'); var updating = false; var UpdateTL = function() { if (updating) return; updating = true; var messages = target.children; var bad_msgs = []; for (var i=0; i<messages.length; ++i) { var message = messages[i]; var bad = false; var users = Array.from(message.querySelectorAll('.former')); users.push(message.querySelector('.author')); bad = bad || list.some(function(path){ return users.some(function(user){ return decodeURIComponent(user.href).endsWith(decodeURIComponent(path)); }); }); if (bad) bad_msgs.push(message); } bad_msgs.forEach(function(msg) {msg.remove();}); updating = false; }; var observer = new MutationObserver(UpdateTL); observer.observe(target, {childList: true}); UpdateTL(); } })();