知乎嘲讽回来罢
// ==UserScript==
// @name zhihusurprise
// @namespace http://tampermonkey.net/
// @version 1.1
// @description 知乎嘲讽回来罢
// @author You
// @match *://*.zhihu.com/*
// @grant none
// @license GPLv3
// ==/UserScript==
(function() {
'use strict';
// 配置要替换的图片地址
const imageReplacements = {
// 原始地址: 新地址
'https://pic1.zhimg.com/v2-5c9b7521eb16507c9d2f747f3a32a813.png': 'https://raw.githubusercontent.com/yizhibaize1/zhihusurprise/refs/heads/main/surprise.jpg',
// 可以添加更多替换规则
// '原始地址2': '新地址2',
};
// 主替换函数
function replaceImages() {
// 处理所有<img>标签
document.querySelectorAll('img').forEach(img => {
const src = img.src;
// 检查是否需要替换
for (const [oldUrl, newUrl] of Object.entries(imageReplacements)) {
if (src.includes(oldUrl)) {
// 避免重复替换
if (!img.dataset.replaced) {
console.log(`替换图片: ${src} -> ${newUrl}`);
img.src = newUrl;
img.dataset.replaced = 'true'; // 标记已替换
}
break;
}
}
});
// 处理CSS背景图片
const styleElements = document.querySelectorAll('*[style]');
styleElements.forEach(element => {
const style = element.getAttribute('style');
for (const [oldUrl, newUrl] of Object.entries(imageReplacements)) {
if (style.includes(oldUrl)) {
const newStyle = style.replace(
new RegExp(`url\\(["']?${escapeRegExp(oldUrl)}["']?\\)`, 'gi'),
`url("${newUrl}")`
);
element.setAttribute('style', newStyle);
element.dataset.bgReplaced = 'true'; // 标记已替换
break;
}
}
});
}
// 辅助函数:转义正则特殊字符
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
// 初始替换
replaceImages();
// 监听DOM变化以处理动态加载的内容
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
if (mutation.addedNodes.length) {
replaceImages();
}
});
});
// 开始观察整个文档的变化
observer.observe(document, {
childList: true,
subtree: true
});
// 监听URL变化(适用于单页应用)
let lastUrl = location.href;
setInterval(() => {
const currentUrl = location.href;
if (currentUrl !== lastUrl) {
lastUrl = currentUrl;
// 添加延时确保新页面内容加载完成
setTimeout(replaceImages, 1000);
}
}, 500);
})();