// ==UserScript== // @name 替换多个文本 // @namespace https://viayoo.com/ // @version 0.1 // @description try to take over the world! // @author You // @run-at document-start // @match https://*/* // @grant none // ==/UserScript== var isReplacing = false; var replaceMap = new Map(); var originalTextMap = new Map(); function replaceTextInDocument(node) { if (node.nodeType === Node.TEXT_NODE) { if (!originalTextMap.has(node)) { originalTextMap.set(node, node.textContent); } if (isReplacing) { var newText = originalTextMap.get(node); replaceMap.forEach((replacement, original) => { newText = newText.replace(new RegExp(original, 'g'), replacement); }); node.textContent = newText; } else { node.textContent = originalTextMap.get(node); } } else if (node.nodeType === Node.ELEMENT_NODE) { for (var i = 0; i < node.childNodes.length; i++) { replaceTextInDocument(node.childNodes[i]); } } } function openReplaceDialog() { var replaceInput = prompt('请输入要替换的多个词组及其对应的替换内容,格式:原词组1=替换内容1, 原词组2=替换内容2, ...'); if (replaceInput !== null) { replaceInput = replaceInput.trim(); if (replaceInput === '') { return; } replaceMap.clear(); var replaces = replaceInput.split(','); replaces.forEach((replace) => { var parts = replace.split('='); if (parts.length === 2) { var original = parts[0].trim(); var replacement = parts[1].trim(); replaceMap.set(original, replacement); } }); isReplacing = true; replaceTextInDocument(document.body); } else { isReplacing = false; replaceTextInDocument(document.body); } } function addButton(icon, f) { var button = document.createElement('button'); button.className = 'button'; button.innerHTML = '替换文本'; button.style.position = 'fixed'; button.style.top = '10px'; button.style.right = '10px'; button.addEventListener('click', f); document.body.appendChild(button); } addButton('https://common.cnblogs.com/images/copycode.gif', openReplaceDialog);