屏蔽B站搜索提示文本 – 篡改猴脚本
将哔哩哔哩搜索框的动态推荐占位符(placeholder)固定为空,防止其显示B站推荐的搜索词,保护截图隐私。
// ==UserScript==
// @name 移除哔哩哔哩搜索框动态占位符文本
// @name:zh-CN 移除哔哩哔哩搜索框动态占位符文本
// @namespace http://tampermonkey.net/
// @version 2.0
// @description 将哔哩哔哩搜索框的动态推荐占位符(placeholder)固定为空,防止其显示B站推荐的搜索词,保护截图隐私。
// @description:zh-CN 将哔哩哔哩搜索框的动态推荐占位符(placeholder)固定为空,防止其显示B站推荐的搜索词,保护截图隐私。
// @author Gemini AI (根据用户反馈修改)
// @match *://www.bilibili.com/*
// @grant none
// @run-at document-idle
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// 您希望将占位符设置成什么?空字符串 "" 表示移除文本。
// 您也可以设置为一个固定的词,例如 "搜索"
const DESIRED_PLACEHOLDER = ""; // 设置为空字符串,实现“移除这个文本”的效果
// B站导航栏搜索框的 CSS 选择器
const INPUT_SELECTOR = 'input.nav-search-input';
let searchInput = null; // 用于存储搜索框DOM元素
let observer = null; // 用于存储 MutationObserver 实例
/**
* @description 将搜索框的 placeholder 设置为期望的值
*/
function setFixedPlaceholder() {
if (searchInput && searchInput.placeholder !== DESIRED_PLACEHOLDER) {
searchInput.placeholder = DESIRED_PLACEHOLDER;
// console.log(`[Bili Placeholder Fix] Placeholder 已被重置为: "${DESIRED_PLACEHOLDER}"`);
}
}
/**
* @description 初始化 MutationObserver 来监控 placeholder 属性的变化
*/
function observeAndFixPlaceholder() {
if (!searchInput) {
// console.warn('[Bili Placeholder Fix] 未找到搜索框元素,无法启动观察器。');
return;
}
// 如果已存在观察器,先断开
if (observer) {
observer.disconnect();
}
// 创建一个新的 MutationObserver 实例
observer = new MutationObserver((mutationsList, observerInstance) => {
// 遍历所有发生的变更
for (const mutation of mutationsList) {
// 我们只关心 'attributes' 类型的变更,并且是 'placeholder' 属性
if (mutation.type === 'attributes' && mutation.attributeName === 'placeholder') {
// 如果 B站脚本修改了 placeholder,我们立即将其改回来
if (searchInput.placeholder !== DESIRED_PLACEHOLDER) {
setFixedPlaceholder();
}
// 找到我们关心的变更后可以跳出循环
break;
}
}
});
// 配置 MutationObserver:
// - attributes: true => 观察目标节点的属性变动
// - attributeFilter: ['placeholder'] => 只对 'placeholder' 属性的变动做出响应
const config = { attributes: true, attributeFilter: ['placeholder'] };
// 开始观察搜索框元素的属性变化
observer.observe(searchInput, config);
// console.log('[Bili Placeholder Fix] 已启动对搜索框 placeholder 的观察。');
}
/**
* @description 初始化脚本,找到搜索框并开始处理
*/
function initialize() {
searchInput = document.querySelector(INPUT_SELECTOR);
if (searchInput) {
// 1. 立即设置一次我们期望的 placeholder
setFixedPlaceholder();
// 2. 开始观察后续的动态变化
observeAndFixPlaceholder();
// console.log('[Bili Placeholder Fix] 脚本初始化成功,搜索框已处理。');
} else {
// 如果页面加载时搜索框还不存在 (例如某些动态加载的页面部分),
// 则稍后重试。B站的头部通常是稳定存在的,但以防万一。
// console.log('[Bili Placeholder Fix] 未立即找到搜索框,将在500ms后重试...');
setTimeout(initialize, 500);
}
}
// 使用 document-idle 确保在页面主要内容加载得差不多了再执行,
// 但B站的某些组件可能是之后才渲染,所以 initialize 内部有重试逻辑。
initialize();
// 可选:当页面卸载或用户离开页面时,可以断开观察器以释放资源
// 对于大多数简单脚本来说不是必需的,但对于复杂的单页应用(SPA)是个好习惯。
// window.addEventListener('beforeunload', () => {
// if (observer) {
// observer.disconnect();
// // console.log('[Bili Placeholder Fix] 页面即将卸载,已断开 MutationObserver。');
// }
// });
})();
