您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
合并了两个目录生成脚本,支持opus和read页面,修复了评论区显示、动态更新等问题,增加多区块滚动隐藏功能。
// ==UserScript== // @name 《日·键圈时刻表》目录生成+超链接 // @namespace http://tampermonkey.net/ // @version 3.5 // @description 合并了两个目录生成脚本,支持opus和read页面,修复了评论区显示、动态更新等问题,增加多区块滚动隐藏功能。 // @match https://www.bilibili.com/opus/* // @match https://www.bilibili.com/read/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; const isOpusPage = window.location.href.includes('/opus/'); const isReadPage = window.location.href.includes('/read/'); // 定义需要隐藏的元素 let lastScrollTop = 0; const headersToHide = []; // 等待页面加载后隐藏头部 function hideHeaders() { if (isOpusPage) { const opusHeader1 = document.querySelector('.bili-header__bar.mini-header'); const opusHeader2 = document.querySelector('.fixed-author-header'); if (opusHeader1) headersToHide.push(opusHeader1); if (opusHeader2) headersToHide.push(opusHeader2); } else if (isReadPage) { const readHeader1 = document.querySelector('#bili-header-container'); const readHeader2 = document.querySelector('.fixed-top-header'); if (readHeader1) headersToHide.push(readHeader1); if (readHeader2) headersToHide.push(readHeader2); } if (headersToHide.length > 0) { window.addEventListener('scroll', () => { const currentScrollTop = window.scrollY || document.documentElement.scrollTop; headersToHide.forEach(header => { if (currentScrollTop > lastScrollTop) { // 向下滚动时隐藏 header.style.transition = 'top 0.3s'; header.style.top = '-100px'; } else { // 向上滚动时显示 header.style.transition = 'top 0.3s'; header.style.top = '0'; } }); lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; }); } } // 设置延时来确保页面元素加载完成 setTimeout(hideHeaders, 1000); // 延时1秒 // 创建目录容器 const tocContainer = document.createElement('div'); tocContainer.style.position = 'fixed'; tocContainer.style.left = '10px'; tocContainer.style.top = '10px'; tocContainer.style.width = '388px'; tocContainer.style.maxHeight = '96vh'; tocContainer.style.overflowY = 'auto'; tocContainer.style.padding = '5px'; tocContainer.style.backgroundColor = 'rgba(255, 255, 255, 0.95)'; tocContainer.style.borderRadius = '8px'; tocContainer.style.boxShadow = '0 4px 15px rgba(0, 0, 0, 0.2)'; tocContainer.style.zIndex = '1000'; // 添加目录标题 const tocTitle = document.createElement('h3'); tocTitle.innerText = '目录'; tocTitle.style.textAlign = 'center'; tocTitle.style.marginBottom = '15px'; tocTitle.style.fontFamily = 'Arial, sans-serif'; tocTitle.style.color = '#333'; tocTitle.style.fontSize = '18px'; tocContainer.appendChild(tocTitle); // 特别显示逻辑关键字 const highlightKeywords = ["置顶区", "消息区", "日常区", "常驻区"]; // 根据页面类型生成目录 if (isOpusPage) { const pTags = document.querySelectorAll('p'); pTags.forEach((pTag, index) => { const strongElements = pTag.querySelectorAll('strong'); const combinedText = Array.from(strongElements).map(el => el.innerText.trim()).join(' '); if (combinedText && strongElements.length > 0) { const fontSize = window.getComputedStyle(strongElements[0]).fontSize; if (fontSize === '24px') { const id = 'toc-header-' + index; pTag.id = id; const tocItem = document.createElement('a'); tocItem.href = '#' + id; tocItem.innerText = combinedText; tocItem.style.display = 'block'; tocItem.style.color = '#007bff'; tocItem.style.textDecoration = 'none'; tocItem.style.fontSize = '13px'; tocItem.style.marginBottom = '5px'; if (highlightKeywords.some(keyword => combinedText.includes(keyword))) { tocItem.style.fontWeight = 'bold'; tocItem.style.color = '#ff4500'; tocItem.style.fontSize = '16px'; } tocItem.onmouseover = function() { tocItem.style.textDecoration = 'underline'; }; tocItem.onmouseout = function() { tocItem.style.textDecoration = 'none'; }; tocContainer.appendChild(tocItem); } } }); } else if (isReadPage) { const h1Tags = document.querySelectorAll('h1'); h1Tags.forEach((h1Tag, index) => { const combinedText = h1Tag.textContent.trim(); if (combinedText) { const id = 'toc-header-' + index; h1Tag.id = id; const tocItem = document.createElement('a'); tocItem.href = '#' + id; tocItem.innerText = combinedText; tocItem.style.display = 'block'; tocItem.style.color = '#007bff'; tocItem.style.textDecoration = 'none'; tocItem.style.fontSize = '13px'; tocItem.style.marginBottom = '5px'; if (highlightKeywords.some(keyword => combinedText.includes(keyword))) { tocItem.style.fontWeight = 'bold'; tocItem.style.color = '#ff4500'; tocItem.style.fontSize = '16px'; } tocItem.onmouseover = function() { tocItem.style.textDecoration = 'underline'; }; tocItem.onmouseout = function() { tocItem.style.textDecoration = 'none'; }; tocContainer.appendChild(tocItem); } }); } // 添加评论区入口 const commentItem = document.createElement('a'); commentItem.style.display = 'block'; commentItem.style.color = '#dc3545'; commentItem.style.textDecoration = 'none'; commentItem.style.fontSize = '16px'; commentItem.style.fontWeight = 'bold'; commentItem.style.marginTop = '10px'; if (isReadPage) { const commentWrapper = document.querySelector('#comment-wrapper.comment-wrapper'); if (commentWrapper) { commentItem.href = '#comment-wrapper'; commentItem.innerText = '评论区'; } } else if (isOpusPage) { const commentSection = document.querySelector('.bili-tabs.opus-tabs'); if (commentSection) { commentSection.id = 'opus-comment-section'; commentItem.href = '#opus-comment-section'; commentItem.innerText = '评论区'; } } commentItem.onmouseover = function() { commentItem.style.textDecoration = 'underline'; }; commentItem.onmouseout = function() { commentItem.style.textDecoration = 'none'; }; tocContainer.appendChild(commentItem); // 添加到页面 if (tocContainer.childElementCount > 1) { document.body.appendChild(tocContainer); } })(); (function () { 'use strict'; // 获取页面中所有的元素 const elements = document.querySelectorAll('*'); // 遍历这些元素,查找字体大小为17px的文本节点 elements.forEach(el => { const style = window.getComputedStyle(el); // 获取样式 if (style.fontSize === '17px') { // 筛选字体大小为17px的元素 const text = el.textContent.trim(); // 获取文本内容 // 匹配以 "https" 开头的链接 const linkRegex = /(https?:\/\/[\w./?=&%+-]+)/; if (linkRegex.test(text)) { const updatedHTML = text.replace(linkRegex, url => { // 替换为超链接 return `<a href="${url}" target="_blank" style="color: blue; text-decoration: underline;">${url}</a>`; }); el.innerHTML = updatedHTML; // 替换HTML内容 } } }); })();