Greasy Fork 支持简体中文。

Firefox/ChatGPT: Fix Copy While Editing

Firefox workaround for ChatGPT's buggy code that prevents text copy/cut while editing past chat messages

// ==UserScript==
// @name         Firefox/ChatGPT: Fix Copy While Editing
// @namespace    https://greasyfork.org/en/users/1337417-mevanlc
// @version      0.1
// @description  Firefox workaround for ChatGPT's buggy code that prevents text copy/cut while editing past chat messages
// @author       You
// @match        https://chatgpt.com/*
// @grant        none
// @run-at       document-start
// @license      Unlicense
// ==/UserScript==

(() => {
    'use strict';
    const logPrefix = "userscript: Firefox/ChatGPT: Fix Copy While Editing:";
    const originalAddEventListener = EventTarget.prototype.addEventListener;
    EventTarget.prototype.addEventListener = function(type, listener, options) {
        // console.log("userscript addEventListener override called; type:", type, " listener:", listener, " options:", options);
        if (type === "copy" || type === "cut") {
            const listenerWrapper = (event) => {
                const isEditingChatMsg = event.target && event.target.tagName === "TEXTAREA" && event.target.closest('article');
                if (isEditingChatMsg) {
                    console.log(`${logPrefix} isEditingChatMsg==true: allowing default browser behavior.`);
                } else {
                    console.log(`${logPrefix} isEditingChatMsg==false: invoking ChatGPT's built-in copy/cut handler.`);
                    listener.call(this, event);
                }
            };
            // only wrap 'copy' and 'cut' events
            originalAddEventListener.call(this, type, listenerWrapper, options);
        } else {
            // no custom behavior for events other than 'copy' and 'cut'
            originalAddEventListener.call(this, type, listener, options);
        }
    };
})();