// ==UserScript== // @name Fix bug for Edge translator // @name:zh-CN Fix bug for Edge translator // @namespace http://tampermonkey.net/ // @version 1.0.2 // @description Replace tags with styled to fix the bug of Edge's translator. // @description:zh-CN 把网页中的所有内联的标签替换成同样式,以修复Edge内置翻译器bug // @author yqs112358 // @license MIT // @match *://*/* // @grant none // @run-at document-idle // @downloadURL none // ==/UserScript== (function() { 'use strict'; // Replace a single tag with a same-styled function replaceCodeToSpan(codeNode) { // only process without any child element if (codeNode.tagName === 'CODE' && codeNode.children.length === 0) { const spanNode = document.createElement('span'); // Copy all attributes Array.from(codeNode.attributes).forEach(attr => { spanNode.setAttribute(attr.name, attr.value); }); // Copy all computed styles const computedStyle = window.getComputedStyle(codeNode); for (let key of computedStyle) { spanNode.style[key] = computedStyle[key]; } // Copy InnerHTML spanNode.innerHTML = codeNode.innerHTML; codeNode.parentNode.replaceChild(spanNode, codeNode); } } // Walkthrough a node and its child to replace tags function processNodeAndChild(node) { if (node.nodeType === 1) { // Element node node.querySelectorAll('code').forEach(replaceCodeToSpan); replaceCodeToSpan(node); } } //////////////////////////////////////////////////////// // Replace at startup document.querySelectorAll('code').forEach(replaceCodeToSpan); // Observe DOM changes and replace new-generated if needed const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { mutation.addedNodes.forEach(processNodeAndChild); }); }); observer.observe(document.body, { childList: true, subtree: true }); })();