// ==UserScript== // @name 磁力链和ED2K文本变成超链接超级链接 // @namespace http // @version 1.1.1 // @description 自动将磁力链和ED2K文本变为超链接 // @author dwpublic // @include http*://* // @match http*://* // @grant none // @run-at document-end // @license MIT // @downloadURL https://update.greasyfork.icu/scripts/501176/%E7%A3%81%E5%8A%9B%E9%93%BE%E5%92%8CED2K%E6%96%87%E6%9C%AC%E5%8F%98%E6%88%90%E8%B6%85%E9%93%BE%E6%8E%A5%E8%B6%85%E7%BA%A7%E9%93%BE%E6%8E%A5.user.js // @updateURL https://update.greasyfork.icu/scripts/501176/%E7%A3%81%E5%8A%9B%E9%93%BE%E5%92%8CED2K%E6%96%87%E6%9C%AC%E5%8F%98%E6%88%90%E8%B6%85%E9%93%BE%E6%8E%A5%E8%B6%85%E7%BA%A7%E9%93%BE%E6%8E%A5.meta.js // ==/UserScript== (function() { const magnetRegex = /((magnet:\?xt=urn:[a-zA-Z0-9]+:[a-zA-Z0-9]{32,}))(?=\s|$)/g; const ed2kRegex = /ed2k:\/\/\|file\|(.+?)\|(\d+)\|([0-9a-fA-F]+)\|\//g; function convertLinks(element) { if (element.innerText != undefined) { element.innerHTML = element.innerHTML .replace(magnetRegex, '$1') .replace(ed2kRegex, 'ed2k://|file|$1|$2|$3|/'); } } function processNode(node) { if (node.nodeType === Node.TEXT_NODE && (node.nodeValue.match(magnetRegex) || node.nodeValue.match(ed2kRegex))) { const span = document.createElement('span'); span.innerHTML = node.nodeValue .replace(magnetRegex, '$1') .replace(ed2kRegex, 'ed2k://|file|$1|$2|$3|/'); node.parentNode.replaceChild(span, node); } else if (node.nodeType === Node.ELEMENT_NODE) { node.childNodes.forEach(child => processNode(child)); } } document.addEventListener('DOMContentLoaded', () => { document.querySelectorAll('body *').forEach(element => processNode(element)); }); })();