// ==UserScript== // @name AutoLinker // @namespace tea.pm // @include * // @grant none // @version 1.0 // @author cljnnn // @description 自动将页面所有文本转换为链接 // @description_en trun url in text to link // @downloadURL none // ==/UserScript== String.prototype.isEmpty = function() { return (this.length === 0 || !this.trim()); }; const reUrl = /\b(https?:\/\/\S*)\b/g; function fixURL(node) { value = node.nodeValue; // console.log("updating link... ", value); newValue = value.replace(reUrl, '$1'); var replacementNode = document.createElement('span'); replacementNode.innerHTML = newValue; node.parentNode.insertBefore(replacementNode, node); node.parentNode.removeChild(node); } function traverse(node) { if(!node) { return; } if(node.nodeType != Node.ELEMENT_NODE && node.nodeType != Node.TEXT_NODE) { return; } let name = node.nodeName; if(name == "SCRIPT" || name == "STYLE" || name == "A") { return; } if(node.nodeType == Node.TEXT_NODE) { let value = node.nodeValue; if(!value.isEmpty()) { if(value.match(reUrl)) { fixURL(node); } } } for(let child of node.childNodes) { traverse(child); } } setTimeout(function(){ traverse(document.body); }, 2000);