// ==UserScript== // @name B站哔哩哔哩已注销账号存档检测 // @namespace http://tampermonkey.net/ // @version 0.6 // @description B站已注销账号存档查看,当您在观看视频中遇到显示「账号已注销」的用户时,只需将鼠标悬停在该文字上,即可快速获取关键信息并直达历史投稿存档。在"已关注"列表里搜“注销”也可查看你关注人哪些账号已注销,用于查看这些人可能是谁,鼠标移动到“账号已注销”文字上即可。 // @author HiKey // @match *://*.bilibili.com/* // @icon https://www.bilibili.com/favicon.ico // @grant none // ==/UserScript== (function() { 'use strict'; let tooltip = null; let bufferArea = 50; function createTooltip(uid, x, y) { if (tooltip) tooltip.remove(); tooltip = document.createElement('div'); Object.assign(tooltip.style, { position: 'fixed', background: '#fff', border: '1px solid #ccc', padding: '8px', borderRadius: '4px', boxShadow: '0 2px 8px rgba(0,0,0,0.1)', zIndex: '999999', left: `${x}px`, top: `${y}px` }); const link = `https://www.biliplus.com/api/do.php?act=search&o=pubdate&n=30&p=1&source=biliplus&word=%40m%3D${uid}`; tooltip.innerHTML = `查看历史投稿 (UID:${uid})`; document.body.appendChild(tooltip); document.addEventListener('mousemove', trackMouseMovement); return tooltip; } function trackMouseMovement(e) { if (!tooltip) return; const rect = tooltip.getBoundingClientRect(); const safeArea = { left: rect.left - bufferArea, right: rect.right + bufferArea, top: rect.top - bufferArea, bottom: rect.bottom + bufferArea }; if ( e.clientX < safeArea.left || e.clientX > safeArea.right || e.clientY < safeArea.top || e.clientY > safeArea.bottom ) { tooltip.remove(); tooltip = null; document.removeEventListener('mousemove', trackMouseMovement); } } function extractUID(url) { const fullUrl = url.startsWith('//') ? `https:${url}` : url; const match = fullUrl.match(/space\.bilibili\.com\/(\d+)/); return match ? match[1] : null; } document.addEventListener('mouseover', function(e) { const target = e.target; let uid = null; // 新版用户信息结构检测 if (target.matches('div.vui_ellipsis.multi-mode') && target.textContent.trim() === '账号已注销') { const parentLink = target.closest('a[href*="space.bilibili.com/"]'); if (parentLink) uid = extractUID(parentLink.href); } // 旧版用户信息结构检测 else if (target.matches('a.up-name') && target.textContent.includes('账号已注销')) { uid = extractUID(target.href); } if (uid) { const xPos = Math.min(e.clientX, window.innerWidth - 200); const yPos = Math.min(e.clientY, window.innerHeight - 50); createTooltip(uid, xPos, yPos); } }); window.addEventListener('scroll', () => { if (tooltip) { tooltip.remove(); tooltip = null; } }); })();