Greasy Fork

Greasy Fork is available in English.

ED2K Link Pre Node with Copy Button

在带有ed2k链接的页面上,为每个ed2k链接创建<pre>节点和复制按钮,便于一键复制链接内容

当前为 2024-10-30 提交的版本,查看 最新版本

// ==UserScript==
// @name         ED2K Link Pre Node with Copy Button
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  在带有ed2k链接的页面上,为每个ed2k链接创建<pre>节点和复制按钮,便于一键复制链接内容
// @author       Kai
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // 查找所有<a>标签
    const links = document.querySelectorAll('a[href^="ed2k://"]');

    links.forEach(link => {
        // 创建<pre>节点,并将链接内容设置为<pre>节点的文本
        const preNode = document.createElement('pre');
        preNode.textContent = link.href;

        // 创建复制按钮
        const copyButton = document.createElement('button');
        copyButton.textContent = "复制链接";
        copyButton.style.marginLeft = "10px";  // 增加一些左边距,让按钮和<pre>分开

        // 点击按钮复制链接内容
        copyButton.addEventListener('click', () => {
            navigator.clipboard.writeText(link.href).then(() => {
                // 创建“复制成功”提示文本
                const successMessage = document.createElement('span');
                successMessage.textContent = "复制成功!";
                successMessage.style.setProperty("color", "green", "important");
                successMessage.style.setProperty("margin-left", "10px", "important");

                // 将提示文本添加到按钮后面
                copyButton.after(successMessage);

                // 2秒后移除提示
                setTimeout(() => {
                    successMessage.remove();
                }, 3000);
            }).catch(err => {
                console.error("复制失败:", err);
            });
        });

        // 在<pre>节点前后添加换行
        const beforeBreak = document.createElement('br');
        const afterBreak = document.createElement('br');

        // 在链接后插入换行、<pre>节点、按钮、换行
        link.parentNode.insertBefore(beforeBreak, link.nextSibling);
        link.parentNode.insertBefore(preNode, link.nextSibling);
        link.parentNode.insertBefore(copyButton, preNode.nextSibling);
        link.parentNode.insertBefore(afterBreak, copyButton.nextSibling);
    });
})();