// ==UserScript== // @name bilibili vip remover // @name:zh-CN bilibili大会员削除 // @namespace myfreeer // @version 0.2 // @description remove the 'become-vip' link, repalce red names to original, and replace emoji to pure text // @description:zh-CN 去除“成为大会员”链接,将红名替换为原始格式,替换表情为纯文字 // @author myfreeer // @match http://*.bilibili.com/* // @match http://*.bilibili.com/ // @license MIT // @grant none // @downloadURL none // ==/UserScript== //code from http://javascript.ruanyifeng.com/dom/mutationobserver.html (function(win){ 'use strict'; var listeners = []; var doc = win.document; var MutationObserver = win.MutationObserver || win.WebKitMutationObserver; var observer; function ready(selector, fn){ // 储存选择器和回调函数 listeners.push({ selector: selector, fn: fn }); if(!observer){ // 监听document变化 observer = new MutationObserver(check); observer.observe(doc.documentElement, { childList: true, subtree: true }); } // 检查该节点是否已经在DOM中 check(); } function check(){ // 检查是否匹配已储存的节点 for(var i = 0; i < listeners.length; i++){ var listener = listeners[i]; // 检查指定节点是否有匹配 var elements = doc.querySelectorAll(listener.selector); for(var j = 0; j < elements.length; j++){ var element = elements[j]; // 确保回调函数只会对该元素调用一次 if(!element.ready){ element.ready = true; // 对该节点调用回调函数 listener.fn.call(element, element); } } } } // 对外暴露ready win.ready = ready; })(this); //from https://lvwenhan.com/web-front/374.html function removeClass(obj, cls){ var obj_class = ' '+obj.className+' ';//获取 class 内容, 并在首尾各加一个空格. ex) 'abc bcd' -> ' abc bcd ' obj_class = obj_class.replace(/(\s+)/gi, ' ');//将多余的空字符替换成一个空格. ex) ' abc bcd ' -> ' abc bcd ' var removed = obj_class.replace(' '+cls+' ', ' ');//在原来的 class 替换掉首尾加了空格的 class. ex) ' abc bcd ' -> 'bcd ' removed = removed.replace(/(^\s+)|(\s+$)/g, '');//去掉首尾空格. ex) 'bcd ' -> 'bcd' obj.className = removed;//替换原来的 class. } document.getElementById('i_menu_become_vip').remove(); var vip=document.getElementsByClassName('b-vip-red'); for (var i in vip) removeClass(vip[i], 'b-vip-red'); var vip2=document.getElementsByClassName('b-vip-emoji'); for (var i in vip2) vip2[i].outerHTML=vip2[i].alt; ready('.b-vip-red', function (e) { return removeClass(e, 'b-vip-red'); }); ready('.b-vip-emoji', function (e) { return e.outerHTML = e.alt; });