明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: edata

明经复制代码篡改猴扩展

  [复制链接]
发表于 2025-8-31 09:43:02 | 显示全部楼层
看不懂啊e大这个是干嘛的
回复 支持 反对

使用道具 举报

发表于 2025-8-31 17:48:14 | 显示全部楼层
本帖最后由 senry 于 2025-10-18 14:58 编辑

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

  12. (function() {
  13.     'use strict';

  14.     // 使用油猴的 @grant 命令添加CSS样式,让按钮更美观
  15.     GM_addStyle(`
  16.         /* ... (CSS部分不变) */
  17.         .copy-btn {
  18.             margin-left: 15px;
  19.             padding: 2px 8px;
  20.             color: #1e90ff;
  21.             font-weight: bold;
  22.             cursor: pointer;
  23.             border: 1px solid #1e90ff;
  24.             border-radius: 4px;
  25.             user-select: none;
  26.             transition: all 0.2s;
  27.         }
  28.         .copy-btn:hover {
  29.             background-color: #1e90ff;
  30.             color: white;
  31.         }
  32.         .copy-btn:active {
  33.             transform: scale(0.95);
  34.         }
  35.         .copy-btn.copied {
  36.             background-color: #28a745;
  37.             color: white;
  38.             border-color: #28a745;
  39.         }
  40.     `);

  41.     // 主处理函数
  42.     function addCopyButtons() {
  43.         const codeBlocks = document.querySelectorAll('[id^="mc_code"]');

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

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

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

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

  54.                 let textToCopy = textarea.value;

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

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

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

  66.                 // 2. 替换所有 HTML 实体为实际字符
  67.                 textToCopy = textToCopy.replace(/&quot;/g, '"')
  68.                                        .replace(/&lt;/g, '<')
  69.                                        .replace(/&gt;/g, '>')
  70.                                        .replace(/&#10005;/g, '&#10005;');

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

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

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

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

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

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

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

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

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

  104. })();

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
edata + 1 + 50 很给力!

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2025-9-12 15:43:39 | 显示全部楼层
简直了,立国利民
回复 支持 反对

使用道具 举报

发表于 2025-9-25 16:09:14 | 显示全部楼层
我一般是点“普通浏览”
ctrl+A再接ctrl+C
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-25 17:08:01 | 显示全部楼层
masterlong 发表于 2025-9-25 16:09
我一般是点“普通浏览”
ctrl+A再接ctrl+C

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

使用道具 举报

发表于 2025-10-8 09:53:19 | 显示全部楼层
本帖最后由 pxt2001 于 2025-10-8 10:58 编辑
664571221 发表于 2025-8-31 09:43
看不懂啊e大这个是干嘛的


你要相信大佬出手绝不会含糊!

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



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




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-10-14 16:25:10 | 显示全部楼层
非常的实用教程
回复 支持 反对

使用道具 举报

发表于 2025-10-14 16:35:56 | 显示全部楼层
我用的傲游浏览器+篡改猴,插件不能正常运行,以下可以正常运行,给有需要的人吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 2025-10-31 12:16:44 | 显示全部楼层
很好用的工具脚本
回复 支持 反对

使用道具 举报

发表于 2025-10-31 15:29:32 | 显示全部楼层
非常好用,感谢分享~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-11-25 10:17 , Processed in 0.296541 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表