// ==UserScript== // @name bilibili直播净化 // @namespace https://github.com/lzghzr/GreasemonkeyJS // @version 4.2.17 // @author lzghzr // @description 屏蔽聊天室礼物以及关键字, 净化聊天室环境 // @icon data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGVsbGlwc2UgY3g9IjE2IiBjeT0iMTYiIHJ4PSIxNSIgcnk9IjE1IiBzdHJva2U9IiMwMGFlZWMiIHN0cm9rZS13aWR0aD0iMiIgZmlsbD0ibm9uZSIvPjx0ZXh0IGZvbnQtZmFtaWx5PSJOb3RvIFNhbnMgU0MiIGZvbnQtc2l6ZT0iMjIiIHg9IjUiIHk9IjIzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iMCIgZmlsbD0iIzAwYWVlYyI+5ruaPC90ZXh0Pjwvc3ZnPg== // @supportURL https://github.com/lzghzr/GreasemonkeyJS/issues // @match https://live.bilibili.com/* // @match https://www.bilibili.com/blackboard/* // @license MIT // @compatible chrome 基础功能需要 88 以上支持 :not() 伪类,高级功能需要 105 及以上支持 :has() 伪类 // @compatible edge 基础功能需要 88 以上支持 :not() 伪类,高级功能需要 105 及以上支持 :has() 伪类 // @compatible firefox 基础功能需要 84 以上支持 :not() 伪类,高级功能需要 :has() 伪类,暂不支持 // @grant GM_addStyle // @grant GM_getValue // @grant GM_setValue // @grant unsafeWindow // @run-at document-start // @downloadURL none // ==/UserScript== const W = typeof unsafeWindow === 'undefined' ? window : unsafeWindow; class NoVIP { elmStyleCSS; chatObserver; danmakuObserver; Start() { this.elmStyleCSS = GM_addStyle(''); this.AddCSS(); const chatMessage = new Map(); this.chatObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(addedNode => { if (addedNode instanceof HTMLDivElement && addedNode.classList.contains('danmaku-item')) { const chatNode = addedNode.querySelector('.danmaku-item-right'); if (chatNode !== null) { const chatText = chatNode.innerText; const dateNow = Date.now(); if (chatMessage.has(chatText) && dateNow - chatMessage.get(chatText) < 10_000) { addedNode.classList.add('NoVIP_chat_hide'); } else { chatMessage.set(chatText, dateNow); } } } }); }); }); const elmDivChatList = document.querySelector('#chat-items'); if (elmDivChatList !== null) { this.chatObserver.observe(elmDivChatList, { childList: true }); } const danmakuMessage = new Map(); this.danmakuObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(addedNode => { const danmakuNode = addedNode instanceof Text ? addedNode.parentElement : addedNode; if (danmakuNode?.classList?.contains('bili-dm')) { const danmakuText = danmakuNode.innerText.split(' ×')[0]; const dateNow = Date.now(); if (danmakuMessage.has(danmakuText) && dateNow - danmakuMessage.get(danmakuText) < 10_000) { danmakuNode.classList.add('NoVIP_danmaku_hide'); } else { danmakuMessage.set(danmakuText, dateNow); } } }); }); }); const elmDivDanmaku = document.querySelector('#live-player'); if (elmDivDanmaku !== null) { this.danmakuObserver.observe(elmDivDanmaku, { childList: true, subtree: true }); } setInterval(() => { const dateNow = Date.now(); chatMessage.forEach((value, key) => { if (dateNow - value > 60_000) { chatMessage.delete(key); } }); danmakuMessage.forEach((value, key) => { if (dateNow - value > 60_000) { danmakuMessage.delete(key); } }); }, 60_000); const docObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(addedNode => { if (addedNode instanceof HTMLDivElement && addedNode.classList.contains('dialog-ctnr')) { const blockEffectCtnr = addedNode.querySelector('.block-effect-ctnr'); if (blockEffectCtnr !== null) { this.AddUI(blockEffectCtnr); } } }); }); }); docObserver.observe(document, { childList: true, subtree: true }); const block = localStorage.getItem('LIVE_BLCOK_EFFECT_STATE'); if (block?.includes('2')) { localStorage.setItem('LIVE_BLCOK_EFFECT_STATE', '2'); } else { localStorage.setItem('LIVE_BLCOK_EFFECT_STATE', ''); } this.ChangeCSS(); } NORoomSkin() { if (config.menu.noRoomSkin.enable) { W.roomBuffService.__NORoomSkin = true; W.roomBuffService.unmount(); } else { W.roomBuffService.__NORoomSkin = false; W.roomBuffService.mount(W.roomBuffService.__NORoomSkin_skin); } } ChangeCSS() { let height = 62; let cssText = ` /* 统一用户名颜色 */ .chat-item .user-name { color: var(--brand_blue) !important; }`; if (config.menu.noGuardIcon.enable) { cssText += ` /* 特殊背景 */ .chat-item.chat-colorful-bubble { background-color: unset !important; border-radius: unset !important; display: block !important; margin: unset !important; } /* 欢迎提示条 */ #welcome-area-bottom-vm:has(.sama-avatar-box), /* 粉丝勋章内标识 */ .chat-item .fans-medal-item-ctnr .medal-guard, /* 订阅舰长 */ .chat-item.guard-buy { display: none !important; } /* 兼容chrome 105以下版本 */ @supports not selector(:has(a, b)) { #welcome-area-bottom-vm { display: none !important; } }`; } if (config.menu.noGiftMsg.enable) { height -= 32; cssText += ` /* 底部小礼物, 调整高度 */ .chat-history-list.with-penury-gift { height: 100% !important; } /* 热门流量推荐 */ .chat-item.hot-rank-msg, /* VIP标识 */ #activity-welcome-area-vm, .chat-item .vip-icon, .chat-item.welcome-msg, /* 高能标识 */ .chat-item.top3-notice, .chat-item .rank-icon, /* 分享直播间 */ .chat-item.important-prompt-item, #chat-gift-bubble-vm, #penury-gift-msg, #gift-screen-animation-vm, #my-dear-haruna-vm .super-gift-bubbles, .chat-item.gift-item, .chat-item.system-msg, .web-player-inject-wrap .announcement-wrapper, .bilibili-live-player-video-operable-container>div:first-child>div:last-child, .bilibili-live-player-video-gift, .bilibili-live-player-danmaku-gift { display: none !important; }`; } if (config.menu.noSystemMsg.enable) { height -= 30; cssText += ` .chat-history-list.with-brush-prompt { height: 100% !important; } /* 聊天下方滚动消息,进场、点赞之类的 */ #brush-prompt, /* 初始系统提示 */ .chat-item.convention-msg, /* 各种野生消息 */ .chat-item.common-danmuku-msg, /* 各种野生消息 x2 */ .chat-item.misc-msg, /* 各种野生消息 x3 (Toasts) */ .link-toast { display: none !important; }`; } if (config.menu.noSuperChat.enable) { cssText += ` /* 调整 SuperChat 聊天框 */ .chat-history-list { padding-top: 5px !important; } .chat-item.superChat-card-detail { margin-left: unset !important; margin-right: unset !important; min-height: unset !important; } .chat-item .card-item-middle-top { background-color: unset !important; background-image: unset !important; border: unset !important; display: inline !important; padding: unset !important; } .chat-item .card-item-middle-top-right { display: unset !important; } .chat-item .superChat-base { display: unset !important; height: unset !important; line-height: unset !important; vertical-align: unset !important; width: unset !important; } .chat-item .superChat-base .fans-medal-item-ctnr { margin-right: 4px !important; } .chat-item .name, .chat-item .card-item-name { color: var(--brand_blue) !important; display: unset !important; font-size: unset !important; font-weight: unset !important; height: unset !important; line-height: 20px !important; margin-left: unset !important; opacity: unset !important; overflow: unset !important; text-overflow: unset !important; vertical-align: unset !important; white-space: unset !important; width: unset !important; } /* 为 SuperChat 用户名添加 : */ .chat-item.superChat-card-detail .name:after, .chat-item.superChat-card-detail .card-item-name:after { content: ' : '; } .chat-item .card-item-middle-bottom { background-color: unset !important; display: unset !important; padding: unset !important; } .chat-item .input-contain { display: unset !important; } .chat-item .text { color: var(--text2) !important; } /* SuperChat 提示条 */ #chat-msg-bubble-vm, /* SuperChat 保留条 */ #pay-note-panel-vm, .chat-item .bottom-background, /* SuperChat 聊天条 右上角电池 */ .chat-item .card-item-top-right, /* SuperChat 按钮 */ #chat-control-panel-vm .super-chat { display: none !important; }`; } if (config.menu.noEmoticons.enable) { cssText += ` #chat-control-panel-vm .emoticons-panel, .chat-item.chat-emoticon { display: none !important; }`; } if (config.menu.noEmotDanmaku.enable) { cssText += ` .bili-dm > img:not(.bili-icon) { display: none !important; }`; } if (config.menu.noLikeBtn.enable) { cssText += ` /* 点赞按钮 */ #chat-control-panel-vm .like-btn, /* 点赞消息 */ .chat-item[data-type="6"], /* 点赞数 */ #head-info-vm .icon-ctnr:has(.like-icon) { display: none !important; } /* 兼容chrome 105以下版本 */ @supports not selector(:has(a, b)) { #head-info-vm .like-icon, #head-info-vm .like-text { display: none !important; } }`; } if (config.menu.noGiftControl.enable) { cssText += ` /* 排行榜 */ .rank-list-section .gift-rank-cntr .top3-cntr .default, .rank-list-section .guard-rank-cntr:not(.open) .guard-empty { height: 42px !important; } .rank-list-section .guard-rank-cntr:not(.open) .guard-empty { background-size: contain !important; background-position: center !important; background-repeat: no-repeat !important; } .rank-list-section .gift-rank-cntr .top3-cntr .default-msg { bottom: -12px !important; } .rank-list-section, .rank-list-section.new, .rank-list-section.new .rank-list-ctnr[style*="height: 178px;"] { height: 98px !important; } .rank-list-section .tab-content, .rank-list-section.new .tab-content, .rank-list-section.new .guard-rank-cntr .rank-list-cntr { min-height: unset !important; } .rank-list-section .tab-content[style*="height: 95px;"], .rank-list-section .gift-rank-cntr .top3-cntr { height: 64px !important; } .rank-list-section .guard-rank-cntr .top3-cntr > span { height: 32px !important; } .rank-list-section.new .gift-rank-cntr .top3-cntr, .rank-list-section.new .guard-rank-cntr { height: unset !important; } /* 调整聊天区 */ .chat-history-panel, .chat-history-panel.new { height: calc(100% - 98px - 145px) !important; } /* 直播分区 */ .live-area { display: flex !important; } /* 排行榜 */ .rank-list-section.new .gift-rank-cntr .top3 > div ~ div, .rank-list-section.new .guard-rank-cntr .top3-cntr > span ~ span, /* 人气榜 */ #head-info-vm .popular-and-hot-rank, /* 礼物星球 */ #head-info-vm .gift-planet-entry, /* 活动榜 */ #head-info-vm .activity-entry, /* 粉丝团 */ #head-info-vm .follow-ctnr, /* 礼物按钮 */ #web-player-controller-wrap-el .web-live-player-gift-icon-wrap, /* 礼物栏 */ .gift-control-panel > *:not(.left-part-ctnr), #web-player__bottom-bar__container, /* 头像框 */ .blive-avatar-pendant, /* 水印 */ .web-player-icon-roomStatus { display: none !important; }`; } if (config.menu.noWealthMedalIcon.enable) { cssText += ` /* 聊天背景, 存疑 */ .chat-item.wealth-bubble { border-image-source: unset !important; } /* 欢迎提示条 */ #welcome-area-bottom-vm:has(.wealth-medal), /* 弹幕 */ .bili-dm > .bili-icon, /* 聊天 */ .chat-item .wealth-medal-ctnr { display: none !important; } /* 兼容chrome 105以下版本 */ @supports not selector(:has(a, b)) { #welcome-area-bottom-vm { display: none !important; } }`; } if (config.menu.noFansMedalIcon.enable) { cssText += ` /* 聊天 */ .chat-item .fans-medal-item-ctnr, /* 底部提示条 */ #brush-prompt .fans-medal-item-ctnr { display: none !important; }`; } if (config.menu.noLiveTitleIcon.enable) { cssText += ` .chat-item .title-label { display: none !important; }`; } if (config.menu.noRaffle.enable) { cssText += ` body:not(.player-full-win):has(#anchor-guest-box-id)[style*="overflow: hidden;"] { overflow-y: overlay !important; } #shop-popover-vm, #anchor-guest-box-id, #player-effect-vm, #chat-draw-area-vm, /* 天选之类的 */ .gift-control-panel .left-part-ctnr, .anchor-lottery-entry, .popular-main .lottery { display: none !important; } /* 兼容chrome 105以下版本 */ @supports not selector(:has(a, b)) { body:not(.player-full-win)[style*="overflow: hidden;"] { overflow-y: overlay !important; } }`; } if (config.menu.noDanmakuColor.enable) { cssText += ` .bili-dm { color: #ffffff !important; }`; } if (config.menu.noGameId.enable) { cssText += ` /* 总容器 */ .web-player-inject-wrap, /* PK */ /* #pk-vm, */ /* #awesome-pk-vm, */ /* #chaos-pk-vm, */ /* 多人连麦 */ /* #multi-voice-index, */ /* #multi-player, */ /* 互动游戏 */ #game-id, /* 连麦 */ #chat-control-panel-vm .voice-rtc, /* 帮玩 */ #chat-control-panel-vm .play-together-service-card-container, /* 一起玩 */ #chat-control-panel-vm .play-together-entry { display: none !important; }`; } if (config.menu.noBBChat.enable) { cssText += ` /* 官方 */ #aside-area-vm #combo-card, /* 自定义 */ .chat-item.NoVIP_chat_hide { display: none !important; }`; } if (config.menu.noBBDanmaku.enable) { cssText += ` /* 官方 */ .danmaku-item-container .combo { display: none !important; } /* 自定义 */ .bili-dm.NoVIP_danmaku_hide, /* 官方 */ .danmaku-item-container .mode-adv { color: transparent !important; text-shadow: unset !important; }`; } cssText += ` .chat-history-list.with-penury-gift.with-brush-prompt { height: calc(100% - ${height}px) !important; }`; this.NORoomSkin(); this.elmStyleCSS.innerHTML = cssText; } AddUI(addedNode) { const elmUList = addedNode.firstElementChild; elmUList.childNodes.forEach(child => { if (child instanceof Comment) { child.remove(); } }); const listLength = elmUList.childElementCount; if (listLength > 10) { return; } const changeListener = (itemHTML, x) => { const itemSpan = itemHTML.querySelector('span'); const itemInput = itemHTML.querySelector('input'); itemInput.checked = config.menu[x].enable; itemInput.checked ? selectedCheckBox(itemSpan) : defaultCheckBox(itemSpan); itemInput.addEventListener('change', ev => { const evt = ev.target; evt.checked ? selectedCheckBox(itemSpan) : defaultCheckBox(itemSpan); config.menu[x].enable = evt.checked; GM_setValue('blnvConfig', encodeURI(JSON.stringify(config))); this.ChangeCSS(); }); }; const selectedCheckBox = (spanClone) => { spanClone.classList.remove('checkbox-default'); spanClone.classList.add('checkbox-selected'); }; const defaultCheckBox = (spanClone) => { spanClone.classList.remove('checkbox-selected'); spanClone.classList.add('checkbox-default'); }; const replaceItem = (listNodes, x) => { for (const child of listNodes) { if (child.innerText === config.menu[x].replace) { return child; } } }; const itemHTML = elmUList.firstElementChild.cloneNode(true); const itemInput = itemHTML.querySelector('input'); const itemLabel = itemHTML.querySelector('label'); itemInput.id = itemInput.id.replace(/\d/, ''); itemLabel.htmlFor = itemLabel.htmlFor.replace(/\d/, ''); let i = listLength + 10; const listNodes = elmUList.childNodes; for (const x in config.menu) { const child = replaceItem(listNodes, x); if (child === undefined) { const itemHTMLClone = itemHTML.cloneNode(true); const itemInputClone = itemHTMLClone.querySelector('input'); const itemLabelClone = itemHTMLClone.querySelector('label'); itemInputClone.id += i; itemLabelClone.htmlFor += i; i++; itemLabelClone.innerText = config.menu[x].name; changeListener(itemHTMLClone, x); elmUList.appendChild(itemHTMLClone); } else { const itemHTMLClone = child.cloneNode(true); const itemLabelClone = itemHTMLClone.querySelector('label'); itemLabelClone.innerText = config.menu[x].name; changeListener(itemHTMLClone, x); child.remove(); elmUList.appendChild(itemHTMLClone); } } } AddCSS() { GM_addStyle(` .gift-block { border: 2px solid; border-radius: 50%; display: inline-block; height: 18px; text-align: center; width: 18px; } .gift-block:before { content: '滚' !important; font-size: 14px; vertical-align: top; line-height: 14px; } /* 多行菜单 */ .border-box.dialog-ctnr.common-popup-wrap.top-left[style*="width: 200px;"] { width: 270px !important; } .block-effect-ctnr .item { float: left; } .block-effect-ctnr .item .cb-icon { left: unset !important; margin-left: -6px; } .block-effect-ctnr .item label { width: 84px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } /* 隐藏网页全屏榜单 */ .player-full-win .rank-list-section { display: none !important; } .player-full-win .chat-history-panel:not([style]) { height: calc(100% - 135px) !important; }`); } } const defaultConfig = { version: 1697634518944, menu: { noGiftMsg: { name: '屏蔽礼物相关', replace: '屏蔽全部礼物及广播', enable: false }, noSystemMsg: { name: '屏蔽系统消息', replace: '屏蔽进场信息', enable: false }, noSuperChat: { name: '屏蔽醒目留言', replace: '屏蔽醒目留言', enable: false }, noEmoticons: { name: '屏蔽表情聊天', replace: '屏蔽表情动画(右下角)', enable: false }, noEmotDanmaku: { name: '屏蔽表情弹幕', replace: '屏蔽表情弹幕', enable: false }, noLikeBtn: { name: '屏蔽点赞按钮', enable: false }, noGiftControl: { name: '屏蔽礼物控件', enable: false }, noGuardIcon: { name: '屏蔽舰队标识', enable: false }, noWealthMedalIcon: { name: '屏蔽荣耀勋章', enable: false }, noFansMedalIcon: { name: '屏蔽粉丝勋章', enable: false }, noLiveTitleIcon: { name: '屏蔽成就头衔', enable: false }, noRaffle: { name: '屏蔽抽奖橱窗', enable: false }, noDanmakuColor: { name: '屏蔽弹幕颜色', enable: false }, noGameId: { name: '屏蔽互动游戏', enable: false }, noBBChat: { name: '屏蔽刷屏聊天', enable: false }, noBBDanmaku: { name: '屏蔽刷屏弹幕', enable: false }, noRoomSkin: { name: '屏蔽房间皮肤', enable: false }, noActivityPlat: { name: '屏蔽活动皮肤', enable: false }, noRoundPlay: { name: '屏蔽视频轮播', enable: false }, noSleep: { name: '屏蔽挂机检测', enable: false }, invisible: { name: '隐身入场', enable: false } } }; const userConfig = GM_getValue('blnvConfig', null) === null ? defaultConfig : JSON.parse(decodeURI(GM_getValue('blnvConfig'))); let config; if (userConfig.version === undefined || userConfig.version < defaultConfig.version) { for (const x in defaultConfig.menu) { try { defaultConfig.menu[x].enable = userConfig.menu[x].enable; } catch (error) { console.error(GM_info.script.name, error); } } config = defaultConfig; } else { config = userConfig; } if (location.href.match(/^https:\/\/live\.bilibili\.com\/(?:blanc\/)?\d/)) { W.webpackChunklive_room = W.webpackChunklive_room || []; W.webpackChunklive_room.push = new Proxy(W.webpackChunklive_room.push, { apply: function (target, _this, args) { for (const [name, fn] of Object.entries(args[0][1])) { let fnStr = fn.toString(); if (fnStr.includes('return this.chatList.children.length')) { const regexp = /(?return )this\.chatList\.children\.length/s; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace(regexp, '$this.chatList.querySelectorAll(".danmaku-item:not(.NoVIP_hide)").length'); } else { console.error(GM_info.script.name, '增强聊天显示失效'); } } if (fnStr.includes('/xlive/app-room/v2/guardTab/topList')) { const regexp = /(?\.guard\+" "\+.*?)(?return(?:(?!return).)*?(?\w+)\.data.*?\.top3)/s; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace(regexp, '$$.data.info.anchor_guard_achieve_level=0;$'); } else { console.error(GM_info.script.name, '屏蔽大航海背景图失效'); } } if (config.menu.noRoundPlay.enable) { if (fnStr.includes('/xlive/web-room/v2/index/getRoomPlayInfo 接口请求错误')) { const regexp = /(?getRoomPlayInfo\?room_id=.*?)(?return(?:(?!return).)*?(?\w+)\.sent.*?getRoomPlayInfo 接口请求错误)/s; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace('roomInitRes', '__NEPTUNE_IS_MY_WAIFU__') .replace(regexp, '$if($.sent.serverResponse.data.live_status===2)$.sent.serverResponse.data.live_status=0;$'); } else { console.error(GM_info.script.name, '屏蔽视频轮播失效'); } } if (fnStr.includes('case"PREPARING":')) { const regexp = /(?case"PREPARING":)(?\w+\((?\w+)\);break;)/s; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace(regexp, '$$.round=0;$'); } else { console.error(GM_info.script.name, '屏蔽下播轮播失效'); } } } if (config.menu.noSleep.enable) { if (fnStr.includes('prototype.sleep=function(')) { const regexp = /(?prototype\.sleep=function\(\w*\){)/; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace(regexp, '$return;'); } else { console.error(GM_info.script.name, '屏蔽挂机检测失效'); } } } if (config.menu.invisible.enable) { if (fnStr.includes('/web-room/v1/index/getInfoByUser 接口请求错误')) { const regexp = /(?not_mock_enter_effect="\+)\w+(?\W)/s; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace(regexp, '$1$'); } else { console.error(GM_info.script.name, '进入房间隐身失效'); } } if (fnStr.includes('this.enterRoomTracker=new ')) { const regexp = /(?this\.enterRoomTracker=new \w+),/s; const match = fnStr.match(regexp); if (match !== null) { fnStr = fnStr.replace(regexp, '$,this.enterRoomTracker.report=()=>{},'); } else { console.error(GM_info.script.name, '房间心跳隐身失效'); } } } if (fn.toString() !== fnStr) { args[0][1][name] = str2Fn(fnStr); } } return Reflect.apply(target, _this, args); } }); function str2Fn(str) { const fnReg = str.match(/^function[^\(]*?\((.*?)\)[^\{]*?{(.*)}$/s); if (fnReg !== null) { const [, args, body] = fnReg; const fnStr = [...args.replaceAll(/\s/g, '').split(','), body]; return new Function(...fnStr); } } if (config.menu.noActivityPlat.enable) { if (self === top) { if (location.pathname.startsWith('/blanc')) { history.replaceState(null, '', location.href.replace(`${location.origin}/blanc`, location.origin)); } else { location.href = location.href.replace(location.origin, `${location.origin}/blanc`); } } else { top?.postMessage(location.origin + location.pathname, 'https://live.bilibili.com'); top?.postMessage(location.origin + location.pathname, 'https://www.bilibili.com'); } } document.addEventListener('readystatechange', () => { if (document.readyState === 'interactive') { if (W.roomBuffService.mount !== undefined) { W.roomBuffService.mount = new Proxy(W.roomBuffService.mount, { apply: function (target, _this, args) { _this.__NORoomSkin_skin = args[0]; if (_this.__NORoomSkin) { args[0] = {}; } return Reflect.apply(target, _this, args); } }); } } if (document.readyState === 'complete') { new NoVIP().Start(); } }); } else if (location.href.includes('bilibili.com/blackboard/')) { if (config.menu.noActivityPlat.enable) { W.addEventListener("message", msg => { if (msg.origin === 'https://live.bilibili.com' && msg.data.startsWith('https://live.bilibili.com/blanc/')) { location.href = msg.data; } }); } }