您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
拒绝评论开车刷烂梗!
// ==UserScript== // @name bilibili【哔哩哔哩】评论关键词屏蔽 // @namespace http://tampermonkey.net/ // @version 1.1.1 // @description 拒绝评论开车刷烂梗! // @description 对B站所有具有评论区的版块进行了匹配覆盖,优化了屏蔽逻辑。 // @description 修复了UI的一些显示BUG // @description 下个版本可能会增加用户屏蔽 // @description 感谢各位提出的意见! // @author cfx // @match *://www.bilibili.com/*/* // @grant none // ==/UserScript== (function() { 'use strict'; let shieldingWords = []; let loadShieldWords=()=>{ let localWords = localStorage.getItem("bilibili-shielding-words"); if(localWords){ shieldingWords = localWords.split(","); }else{ shieldingWords=[]; } } let setShieldWords = ()=>{ localStorage.setItem("bilibili-shielding-words",shieldingWords); } let parseDom = (arg)=> { let objE = document.createElement("div"); objE.innerHTML = arg; return objE.childNodes[0]; } let ifShielded = (word)=>{ for(let i of shieldingWords){ if(word.toString().indexOf(i.toString())!==-1 && i.toString()!==""){ return true; } } return false; } let filterComments = ()=>{ let allReplyComments = document.querySelectorAll(".comment-list .list-item .reply-item"); for (let i of allReplyComments){ let con = i.querySelector(".text-con"); if(ifShielded(i.innerText)){ con.innerHTML = "<span style='color:red'>已屏蔽内容</span>"; } } let allComments = document.querySelectorAll(".comment-list .list-item"); for (let i of allComments){ let con = i.querySelector('.text'); if(ifShielded(con.innerText)){ con.innerHTML = "<span style='color:red'>已屏蔽内容</span>"; } } } let bindEvents = () =>{ let moreReplyBtns = document.querySelectorAll(".btn-more"); let pageNumberChangeBtns = document.querySelectorAll(".tcd-number"); let prePageBtns = document.querySelectorAll(".pre"); let nextPageBtns = document.querySelectorAll(".next"); for(let i of moreReplyBtns){ i.addEventListener('click',()=>{ setTimeout(()=>{ filterComments(); bindEvents(); },1000); }) } for(let i of pageNumberChangeBtns){ i.addEventListener('click',()=>{ setTimeout(()=>{ filterComments(); bindEvents(); },1000); }) } for(let i of prePageBtns){ i.addEventListener('click',()=>{ setTimeout(()=>{ filterComments(); bindEvents(); },1000); }) } for(let i of nextPageBtns){ i.addEventListener('click',()=>{ setTimeout(()=>{ filterComments(); bindEvents(); },1000); }) } } let updateShieldWords = ()=>{ let container = document.querySelector("#bilibili-shielder"); if(!shieldingWords.length){ container.innerHTML = "待添加屏蔽词条"; }else{ container.innerHTML = ""; } for(let i of shieldingWords){ let line = parseDom(`<div class='shielder-line'></div>`); let word = parseDom(`<span class='shielder-word'>${i}</span>`); let btn = parseDom(`<span class='shielder-btn'>❌</span></div>`); btn.onclick=()=>{ for(let index in shieldingWords){ if(shieldingWords[index]===i){ shieldingWords.splice(index,1); } } setShieldWords(); window.location.reload(); } line.appendChild(word); line.appendChild(btn); container.appendChild(line); } } let bilibiliShielderAddWord = ()=>{ let word = prompt("请输入你的屏蔽词"); if(shieldingWords.indexOf(word)==-1&&word!==null&&word!==""){ shieldingWords.push(word); setShieldWords(); updateShieldWords(); filterComments(); } } let createUI = () =>{ let HTML = `<div id='bilibili-shielder-container'>BiliBili评论屏蔽v1.1<div id='bilibili-shielder'></div></div>`; let UI = parseDom(HTML); let Btn = parseDom(`<div id='bilibili-shielder-btn'>添加词条➕</div>`); Btn.addEventListener('click',bilibiliShielderAddWord); UI.appendChild(Btn); let cssStyle = `<style> #bilibili-shielder-container{ width:110px; height:220px; z-index;999; position:fixed; font-size:12px; right:0; top:200px; border:1px solid black; user-select:none; } #bilibili-shielder{ overflow-x:hidden; overflow-y:auto; width:90px; margin:10px auto; height:150px; border:1px solid black; } .shielder-word{ float:left; } .shielder-btn{ float:right; margin-right: 10px;cursor:pointer; } .shielder-line{ height:20px; width:100%; line-height:20px; font-size:12px } #bilibili-shielder-btn{ min-width:90px; margin:10px auto; text-align:center; cursor:pointer; } </style>` let Style = parseDom(cssStyle); document.body.appendChild(UI); document.body.appendChild(Style); } window.onload = function(){ createUI(); loadShieldWords(); updateShieldWords(); } document.body.onscroll= function(){ let commentList = document.querySelector('.comment-list')||null; if(commentList&&commentList.innerText){ bindEvents(); filterComments(); } } })();