664571221 发表于 2025-8-31 09:43:02

看不懂啊e大这个是干嘛的

senry 发表于 2025-8-31 17:48:14

本帖最后由 senry 于 2025-10-18 14:58 编辑

我让Gemini给按钮增加一个样式:lol
// ==UserScript==
// @name         明经复制代码扩展 (优化版)
// @namespace    http://tampermonkey.net/
// @version      2025-08-31
// @description为明经论坛的代码区添加一个美观且功能更强大的复制按钮。
// @author       edata (优化 by Gemini)
// @match      *://*.mjtd.com/*
// @icon         http://bbs.mjtd.com/favicon.ico
// @grant      GM_addStyle
// @grant      GM_setClipboard
// ==/UserScript==

(function() {
    'use strict';

    // 使用油猴的 @grant 命令添加CSS样式,让按钮更美观
    GM_addStyle(`
      /* ... (CSS部分不变) */
      .copy-btn {
            margin-left: 15px;
            padding: 2px 8px;
            color: #1e90ff;
            font-weight: bold;
            cursor: pointer;
            border: 1px solid #1e90ff;
            border-radius: 4px;
            user-select: none;
            transition: all 0.2s;
      }
      .copy-btn:hover {
            background-color: #1e90ff;
            color: white;
      }
      .copy-btn:active {
            transform: scale(0.95);
      }
      .copy-btn.copied {
            background-color: #28a745;
            color: white;
            border-color: #28a745;
      }
    `);

    // 主处理函数
    function addCopyButtons() {
      const codeBlocks = document.querySelectorAll('');

      codeBlocks.forEach(block => {
            const titleElement = block.querySelector('.jssccodetitle');
            if (!titleElement) return;

            if (titleElement.querySelector('.copy-btn')) return;

            const copyBtn = document.createElement('span');
            copyBtn.className = 'copy-btn';
            copyBtn.textContent = '复制代码';

            copyBtn.addEventListener('click', () => {
                const textarea = block.querySelector('textarea');
                if (!textarea) return;

                let textToCopy = textarea.value;

                // ----------------------------------------------------
                // 【最终修复V3】处理换行和实体解码
                // ----------------------------------------------------

                // 1. 将所有 <br /> 替换为单个换行符 \n
                // 注意:这里可能需要处理原始数据中存在的原始换行符 \n 或 \r\n,
                // 以便它们不会与 <br /> 转换的 \n 产生重复空行。
                // 最安全的方法是先标准化所有换行符为 \n,然后处理 <br />。
                textToCopy = textToCopy.replace(/\r\n|\r/g, '\n'); // 标准化换行符

                // 替换 <br /> 及其周围的零个或一个换行符为一个换行符 \n
                // 这样可以避免 <br /> 旁边紧跟着的原始换行符导致双重空行。
                textToCopy = textToCopy.replace(/\n?<br\s*\/?>\n?/gi, '\n');

                // 2. 替换所有 HTML 实体为实际字符
                textToCopy = textToCopy.replace(/&quot;/g, '"')
                                       .replace(/&lt;/g, '<')
                                       .replace(/&gt;/g, '>')
                                       .replace(/✕/g, '✕');

                // 3. 替换 &nbsp; 为普通空格
                textToCopy = textToCopy.replace(/&nbsp;/g, ' ');

                // 4. 清理连续的空行:将 3 个或更多连续换行符替换为 2 个换行符(保留一行空行)
                // 这样可以保留代码块之间的空行,但移除多余的空行。
                textToCopy = textToCopy.replace(/\n{3,}/g, '\n\n');

                // 5. 移除开头或结尾的空白行和空格
                textToCopy = textToCopy.trim();

                // 检查页面是否存在原生的 setCopy 函数
                if (typeof setCopy === 'function') {
                  setCopy(textToCopy, "代码已复制到剪贴板");
                } else {
                  GM_setClipboard(textToCopy);
                }

                // 提供视觉反馈
                copyBtn.textContent = '复制成功!';
                copyBtn.classList.add('copied');
                setTimeout(() => {
                  copyBtn.textContent = '复制代码';
                  copyBtn.classList.remove('copied');
                }, 2000);
            });

            // 将按钮插入到标题栏
            titleElement.appendChild(copyBtn);
      });
    }

    // 使用 MutationObserver 监听DOM变化
    const observer = new MutationObserver((mutations) => {
      addCopyButtons();
    });

    const config = { childList: true, subtree: true };
    observer.observe(document.body, config);

    // 页面首次加载时先立即运行一次
    addCopyButtons();

})();

行天下 发表于 2025-9-12 15:43:39

简直了,立国利民

masterlong 发表于 2025-9-25 16:09:14

我一般是点“普通浏览”
ctrl+A再接ctrl+C

edata 发表于 2025-9-25 17:08:01

masterlong 发表于 2025-9-25 16:09
我一般是点“普通浏览”
ctrl+A再接ctrl+C

使用环境win10+edge浏览器,普通浏览复制出来的有非法的空白字符.

pxt2001 发表于 2025-10-8 09:53:19

本帖最后由 pxt2001 于 2025-10-8 10:58 编辑

664571221 发表于 2025-8-31 09:43
看不懂啊e大这个是干嘛的

你要相信大佬出手绝不会含糊!
功能是给明经通道论坛增加了一个按钮,可以带格式复制代码。感谢E大!
网站原版【复制代码】和通过edge浏览器扩展_篡改猴新增【格式复制】,在编辑器粘贴代码,两种效果如截图所示。
↓明经通道论坛的代码


↓好代码当然要学习,复制粘贴




hihand2000 发表于 2025-10-14 16:25:10

非常的实用教程

yangyangyixia 发表于 2025-10-14 16:35:56

我用的傲游浏览器+篡改猴,插件不能正常运行,以下可以正常运行,给有需要的人吧

sowin 发表于 2025-10-31 12:16:44

很好用的工具脚本

逗亦斗霸 发表于 2025-10-31 15:29:32

非常好用,感谢分享~
页: 1 2 [3]
查看完整版本: 明经复制代码篡改猴扩展