隐藏网页微博首页广告
// ==UserScript==
// @name 移除微博首页广告
// @namespace https://github.com/SIXiaolong1117/Rules
// @version 0.2
// @description 隐藏网页微博首页广告
// @license MIT
// @icon https://weibo.com/favicon.ico
// @author SI Xiaolong
// @match https://weibo.com/*
// @match https://*.weibo.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 隐藏所有 class 以 TipsAd 开头的元素
function hideTipsAdElements() {
// 使用属性选择器查找所有 class 以 TipsAd 开头的元素
const tipsAdElements = document.querySelectorAll('[class*="TipsAd"]');
let hiddenCount = 0;
tipsAdElements.forEach(element => {
const classList = element.className || '';
// 检查是否包含以 TipsAd 开头的 class
if (classList.split(/\s+/).some(className => className.startsWith('TipsAd'))) {
hideElement(element);
hiddenCount++;
}
});
if (hiddenCount > 0) {
console.log(`[Tampermonkey] 已隐藏 ${hiddenCount} 个 TipsAd 开头的元素`);
}
return hiddenCount;
}
// 更精确的选择器版本
function hideTipsAdElementsPrecise() {
// 创建精确的选择器,匹配 class 以 TipsAd 开头的元素
const selectors = [
'[class^="TipsAd"]', // class 以 TipsAd 开头
'[class*=" TipsAd"]' // class 包含空格后跟 TipsAd(多个 class 的情况)
];
let allElements = [];
selectors.forEach(selector => {
const elements = document.querySelectorAll(selector);
elements.forEach(element => allElements.push(element));
});
// 去重
const uniqueElements = [...new Set(allElements)];
uniqueElements.forEach(element => {
hideElement(element);
});
if (uniqueElements.length > 0) {
console.log(`[Tampermonkey] 精确选择器隐藏了 ${uniqueElements.length} 个 TipsAd 元素`);
}
return uniqueElements.length;
}
// 彻底隐藏元素的函数
function hideElement(element) {
if (!element || !element.style) return;
element.style.display = 'none';
element.style.visibility = 'hidden';
element.style.opacity = '0';
element.style.height = '0';
element.style.width = '0';
element.style.margin = '0';
element.style.padding = '0';
element.style.pointerEvents = 'none';
element.style.position = 'absolute';
element.style.left = '-9999px';
element.style.top = '-9999px';
element.style.overflow = 'hidden';
// 设置重要属性
element.setAttribute('data-tampermonkey-hidden', 'true');
}
// 注入 CSS 确保样式持久化
const css = `
[class^="TipsAd"],
[class*=" TipsAd"] {
display: none !important;
visibility: hidden !important;
opacity: 0 !important;
height: 0 !important;
width: 0 !important;
margin: 0 !important;
padding: 0 !important;
pointer-events: none !important;
position: absolute !important;
left: -9999px !important;
top: -9999px !important;
overflow: hidden !important;
}
`;
const style = document.createElement('style');
style.textContent = css;
document.head.appendChild(style);
// 使用 MutationObserver 监控 DOM 变化
const observer = new MutationObserver(function(mutations) {
let totalHidden = 0;
mutations.forEach(function(mutation) {
if (mutation.type === 'childList') {
// 检查新添加的节点
mutation.addedNodes.forEach(function(node) {
if (node.nodeType === 1) { // 元素节点
// 检查当前节点是否有 TipsAd class
const classList = node.className || '';
if (classList.split(/\s+/).some(className => className.startsWith('TipsAd'))) {
hideElement(node);
totalHidden++;
}
// 检查子节点
if (node.querySelectorAll) {
const childElements = node.querySelectorAll('[class*="TipsAd"]');
childElements.forEach(element => {
const childClassList = element.className || '';
if (childClassList.split(/\s+/).some(className => className.startsWith('TipsAd'))) {
if (!element.getAttribute('data-tampermonkey-hidden')) {
hideElement(element);
totalHidden++;
}
}
});
}
}
});
}
});
// 额外全局检查
const additionalHidden = hideTipsAdElements();
totalHidden += additionalHidden;
if (totalHidden > 0) {
console.log(`[Tampermonkey] MutationObserver 隐藏了 ${totalHidden} 个 TipsAd 元素`);
}
});
// 开始观察
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
// 定时检查兜底
const checkInterval = setInterval(() => {
const hiddenCount = hideTipsAdElements();
if (hiddenCount > 0) {
console.log(`[Tampermonkey] 定时检查:隐藏了 ${hiddenCount} 个 TipsAd 元素`);
}
}, 1500);
// 页面加载完成后执行一次
window.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
hideTipsAdElements();
hideTipsAdElementsPrecise();
}, 100);
});
// 30秒后停止定时检查(避免长期占用资源)
setTimeout(() => {
clearInterval(checkInterval);
console.log('[Tampermonkey] 停止定时检查');
}, 30000);
// 初始执行
setTimeout(() => {
hideTipsAdElements();
hideTipsAdElementsPrecise();
}, 0);
console.log('[Tampermonkey] 移除微博首页广告 已加载');
})();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址