您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Duplicate the header of code blocks as a footer to give a second copy code button
- // ==UserScript==
- // @name Copy Code in Code Block Footer
- // @namespace http://tampermonkey.net/
- // @version 1.0
- // @description Duplicate the header of code blocks as a footer to give a second copy code button
- // @author Gavin Trutzenbach / @gaveroid
- // @match https://chat.openai.com/*
- // ==/UserScript==
- (function() {
- 'use strict';
- // Helper function to copy text to clipboard
- function copyToClipboard(text) {
- var dummy = document.createElement("textarea");
- document.body.appendChild(dummy);
- dummy.value = text;
- dummy.select();
- document.execCommand("copy");
- document.body.removeChild(dummy);
- }
- // Function to process code blocks
- function processCodeBlocks() {
- var codeBlocks = document.querySelectorAll('div[class^="bg-black"]');
- codeBlocks.forEach(function(codeBlock) {
- var headerDiv = codeBlock.querySelector('div[class^="flex items-center"]');
- if (headerDiv && !codeBlock.querySelector('.duplicated-footer')) {
- var footerDiv = headerDiv.cloneNode(true);
- footerDiv.classList.add('duplicated-footer');
- codeBlock.appendChild(footerDiv);
- // Update copy button function
- var updateCopyButtonFunction = function(button) {
- var originalInnerHTML = button.innerHTML; // Store the original inner HTML
- var copyFunction = function() {
- var codeText = codeBlock.querySelector('code').innerText;
- copyToClipboard(codeText);
- this.innerHTML = '✔ Copied!'; // ASCII icon for checkmark
- var btn = this;
- setTimeout(function() {
- btn.innerHTML = originalInnerHTML; // Revert to original inner HTML
- }, 3000); // Revert back after 3 seconds
- };
- button.removeEventListener('click', copyFunction); // Remove old event listener
- button.addEventListener('click', copyFunction); // Add new event listener
- };
- // Update copy buttons in header and footer
- var copyButtonHeader = headerDiv.querySelector('button');
- var copyButtonFooter = footerDiv.querySelector('button');
- updateCopyButtonFunction(copyButtonHeader);
- updateCopyButtonFunction(copyButtonFooter);
- }
- });
- }
- // Create a MutationObserver to monitor the DOM for changes
- var observer = new MutationObserver(function(mutationsList, observer) {
- processCodeBlocks();
- });
- // Start observing the document with the configured parameters
- observer.observe(document, { childList: true, subtree: true });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址