您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Make Codeforces politically correct.
// ==UserScript== // @name Codeforces 政治正确化 // @namespace http://tampermonkey.net/ // @version 1.2 // @description Make Codeforces politically correct. // @match *://codeforces.com/* // @match *://*.codeforces.com/* // @grant none // @run-at document-idle // @license MIT // ==/UserScript== (function() { 'use strict'; const newFlagUrl = 'https://codeforces.org/s/94047/images/flags-16/cn.png'; const targetImgKeyword = 'tw.png'; const replaceFlagImages = (scope) => { const images = scope.querySelectorAll(`img[src*="${targetImgKeyword}"]:not([data-flag-replaced])`); images.forEach(img => { const style = window.getComputedStyle(img); const originalWidth = parseFloat(style.width); const originalHeight = parseFloat(style.height); img.src = newFlagUrl; if (originalWidth > 0 && originalHeight > 0) { img.style.width = `${originalWidth}px`; img.style.height = `${originalHeight}px`; } else { img.style.width = '16px'; img.style.height = '11px'; } img.setAttribute('data-flag-replaced', 'true'); }); }; replaceFlagImages(document); const observer = new MutationObserver((mutationsList) => { for (const mutation of mutationsList) { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE) { replaceFlagImages(node); } }); } } }); observer.observe(document.body, { childList: true, subtree: true }); })();