Greasy Fork

Greasy Fork is available in English.

自动转换 ed2k 和磁力链接并一键复制

自动检测网页中的所有 ed2k 和磁力链接并将其转换为可点击的超链接,同时提供一键复制所有链接的功能

当前为 2025-02-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         自动转换 ed2k 和磁力链接并一键复制
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  自动检测网页中的所有 ed2k 和磁力链接并将其转换为可点击的超链接,同时提供一键复制所有链接的功能
// @author       98-liu**
// @match        *://*/*
// @grant        GM_setClipboard
// ==/UserScript==

(function() {
    'use strict';

    // 自动检测并转换 ed2k 和磁力链接为超链接
    function convertLinks() {
        // 正则表达式匹配 ed2k 链接
        const ed2kRegex = /ed2k:\/\/\|file\|[^\|]+\|\d+\|[a-fA-F0-9]+\|\//g;
        // 正则表达式匹配磁力链接
        const magnetRegex = /magnet:\?xt=urn:[a-zA-Z0-9:.&=]+/g;

        // 遍历网页中的所有文本节点
        const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, null, false);
        let node;

        while (node = walker.nextNode()) {
            if (node.nodeValue.match(ed2kRegex) || node.nodeValue.match(magnetRegex)) {
                const parent = node.parentNode;

                // 避免重复处理(如果已经是超链接则跳过)
                if (parent.tagName !== 'A') {
                    let newHTML = node.nodeValue;
                    newHTML = newHTML.replace(ed2kRegex, '<a href="$&" target="_blank">$&</a>');
                    newHTML = newHTML.replace(magnetRegex, '<a href="$&" target="_blank">$&</a>');

                    const temp = document.createElement('div');
                    temp.innerHTML = newHTML;

                    // 将新内容插入到 DOM 中
                    while (temp.firstChild) {
                        parent.insertBefore(temp.firstChild, node);
                    }

                    // 移除原始文本节点
                    parent.removeChild(node);
                }
            }
        }
    }

    // 获取网页中的所有 ed2k 和磁力链接
    function getAllLinks() {
        const ed2kRegex = /ed2k:\/\/\|file\|[^\|]+\|\d+\|[a-fA-F0-9]+\|\//g;
        const magnetRegex = /magnet:\?xt=urn:[a-zA-Z0-9:.&=]+/g;
        const textContent = document.body.textContent;

        const ed2kLinks = textContent.match(ed2kRegex) || [];
        const magnetLinks = textContent.match(magnetRegex) || [];

        return [...ed2kLinks, ...magnetLinks].join('\n');
    }

    // 创建一键复制按钮
    function createCopyButton() {
        const button = document.createElement('button');
        button.textContent = '复制所有链接';
        button.style.position = 'fixed';
        button.style.top = '10px';
        button.style.right = '10px';
        button.style.zIndex = '10000';
        button.style.padding = '10px';
        button.style.backgroundColor = '#007bff';
        button.style.color = '#fff';
        button.style.border = 'none';
        button.style.borderRadius = '5px';
        button.style.cursor = 'pointer';

        // 点击按钮时复制所有链接
        button.addEventListener('click', () => {
            const links = getAllLinks();
            if (links) {
                GM_setClipboard(links);
                alert('已复制所有链接到剪贴板!');
            } else {
                alert('未找到链接!');
            }
        });

        document.body.appendChild(button);
    }

    // 在页面加载完成后执行
    window.addEventListener('load', () => {
        convertLinks();
        createCopyButton();
    });

    // 监听动态内容加载(例如 AJAX)
    const observer = new MutationObserver(() => {
        convertLinks();
    });
    observer.observe(document.body, { childList: true, subtree: true });
})();