您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在页面加载前修改网页标题,并防止网站覆盖,支持多网站设置不同标题
// ==UserScript== // @name 【自定义】网站标签页标题 // @namespace https://github.com/realSilasYang // @version 2025-7-29 // @description 在页面加载前修改网页标题,并防止网站覆盖,支持多网站设置不同标题 // @author 阳熙来 // @icon data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNzUzNjEwMjc1OTc1IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjE3NTIiIGRhdGEtZGFya3JlYWRlci1pbmxpbmUtZmlsbD0iIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxwYXRoIGQ9Ik0yMTcuNiA3OTMuNmg1NjMuMmMyMC40OCAwIDM4LjQgMTcuOTIgMzguNCAzOC40cy0xNy45MiAzOC40LTM4LjQgMzguNGgtNTYzLjJjLTIwLjQ4IDAtMzguNC0xNS4zNi0zOC40LTM4LjQgMC0yMC40OCAxNy45Mi0zOC40IDM4LjQtMzguNHoiIGZpbGw9IiNBM0NDRkYiIHAtaWQ9IjE3NTMiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6IHZhcigtLWRhcmtyZWFkZXItYmFja2dyb3VuZC1hM2NjZmYsICM0NTQ4NGEpOyIgZGF0YS1kYXJrcmVhZGVyLWlubGluZS1maWxsPSIiPjwvcGF0aD48cGF0aCBkPSJNNzkzLjYgMzQwLjQ4bC01OC44OCA2Ni41Ni0xOTkuNjgtMjA0LjggNjEuNDQtNjRjMTIuOC0xNS4zNiAzMy4yOC0xNS4zNiA0OC42NCAwbDE0OC40OCAxNTMuNmMxMi44IDEyLjggMTIuOCAzMy4yOCAwIDQ4LjY0ek0xOTkuNjggNTQyLjcyTDQ5MS41MiAyMzguMDhsMTk5LjY4IDIwNC44LTI5MS44NCAzMDQuNjRIMTk5LjY4di0yMDQuOHoiIGZpbGw9IiMyNTg5RkYiIHAtaWQ9IjE3NTQiIHN0eWxlPSItLWRhcmtyZWFkZXItaW5saW5lLWZpbGw6IHZhcigtLWRhcmtyZWFkZXItYmFja2dyb3VuZC0yNTg5ZmYsICMyMDVlYTgpOyIgZGF0YS1kYXJrcmVhZGVyLWlubGluZS1maWxsPSIiPjwvcGF0aD48L3N2Zz4= // @license GNU GPLv3 // @grant none // @match *://tophub.today/* // @match *://*.tophub.today/* // @match *://gushiwen.cn/* // @match *://*.gushiwen.cn/* // @run-at document-start // ==/UserScript== (() => { 'use strict'; /* 1. 先写死映射表,可根据需要继续加 */ const titleMap = { 'tophub.today': '新闻聚合', 'www.tophub.today': '新闻聚合', 'gushiwen.cn': '古诗文网', 'www.gushiwen.cn': '古诗文网' }; /* 2. 立即拿到想要的标题 */ const targetTitle = titleMap[location.hostname]; if (!targetTitle) return; /* 3. 先把标题改掉,越早越好 */ document.title = targetTitle; /* 4. 监听 <title> 的文本变化,一旦网站想改就改回来 */ const lockTitle = () => { const titleEl = document.querySelector('title'); if (!titleEl) return false; new MutationObserver(() => { if (document.title !== targetTitle) document.title = targetTitle; }).observe(titleEl, { childList: true, subtree: true }); return true; }; /* 5. 如果 <title> 还没出现,就轮询到出现为止(最多 5 秒) */ const maxWait = Date.now() + 5000; const tryLock = () => { if (lockTitle()) return; if (Date.now() > maxWait) return; requestAnimationFrame(tryLock); }; tryLock(); /* 6. 极端场景:SPA 路由切换后又被改标题,直接挂全局 hook */ let originalTitleDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'title'); Object.defineProperty(document, 'title', { set(v) { originalTitleDescriptor.set.call(document, targetTitle); }, get() { return originalTitleDescriptor.get.call(document); }, configurable: true }); })();