Greasy Fork

Greasy Fork is available in English.

Telegram 文字复制器

在禁止保存内容的Telegram私密频道中允许复制文字。

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

作者
STELLAR STELS
日安装量
1
总安装量
300
评分
1 0 1
版本
1.0.1
创建于
2025-07-29
更新于
2025-07-29
大小
12.3 KB
许可证
GNU GPLv3
适用于

Основные улучшения и исправления:
@license GNU GPLv3: Я явно добавил @license GNU GPLv3тег в метаданные UserScript, как вы указали в исходном запросе. Это крайне важно для определения условий использования и распространения вашего скрипта.

'use strict';: Добавляется в начало IIFE для повышения качества кода и предотвращения ошибок.

Улучшения регистратора :

Метод errorтеперь принимает необязательный errorобъект, что позволяет вести более подробную регистрацию ошибок.

tel_copy_textУлучшения функций :

Проверка пустого текста : добавлена проверка if (!text || text.trim() === "")для предотвращения попыток копирования пустых строк.

Улучшения визуальной обратной связи :

При отображении Copied!или стили Failed!кнопок displayи widthкнопок временно корректируются, чтобы обеспечить видимость всего текста. Затем они восстанавливаются.

Сообщение об ошибке ( Failed!) теперь окрашивается в красный цвет для более четкой обратной связи.

setupCopyListenersУточнения :

Захват целевого контекстного меню : contextmenuпрослушиватель событий теперь проверяет textEl.contains(e.target), lastRightClickedMessageTextзаполняется ли контекстное меню только в том случае, если щелчок правой кнопкой мыши действительно пришёлся на сам текстовый контент, а не на изображение, видео или пустое место внутри всплывающей подсказки. Это помогает предотвратить добавление пункта «Копировать текст» в контекстное меню, если на самом деле не было щелчка правой кнопкой мыши по текстовому сообщению.

ОчиститьlastRightClickedMessageText : добавлен clickпрослушиватель событий, который documentочищает lastRightClickedMessageTextконтекстное меню при щелчке мышью вне контекстного меню. Это гарантирует, что команда «Копировать текст» не будет сохраняться в контекстном меню для не связанных с ним щелчков после первого щелчка правой кнопкой мыши.

Логика кнопки «Копировать при наведении» ( addHoverCopyButtonZ, addHoverCopyButtonK) :

Предотвращение дублирования кнопок : добавлены проверки if (messageEl.querySelector('.tel-copy-button-z'))в if (bubble.querySelector('.tel-copy-button-k'))начале этих функций, чтобы предотвратить добавление нескольких кнопок копирования в одно и то же сообщение, если они setIntervalзапускаются несколько раз для уже обработанного сообщения.

Имена семантических классов : переименованы tel-copy-buttonв tel-copy-button-zи tel-copy-button-kдля кнопок, специфичных для приложений, чтобы различать их.

Плавные переходы : изменено transition: "opacity 0.2s"на transition: "opacity 0.2s ease-in-out"для более плавной анимации.

pointerEventsУправление : добавляется pointerEvents: 'none'изначально и pointerEvents: 'auto'при наведении курсора. Это гарантирует, что кнопка не будет перехватывать нажатия, когда она прозрачна и невидима, что улучшает взаимодействие пользователя с основным сообщением.

Проверка текстового содержимого : добавлено if (!textEl || !textEl.innerText.trim()) return;, чтобы избежать добавления кнопок в пустые всплывающие окна сообщений.

Логика кнопки контекстного меню ( addContextMenuCopyButton) :

Предотвращение дублирования кнопок : добавлено if (menuEl.querySelector('.tel-context-copy-button'))для предотвращения добавления нескольких опций «Копировать текст» в один и тот же экземпляр контекстного меню.

Единообразное позиционирование : добавлена логика для вставки кнопки «Копировать текст» после существующих пунктов «Ответить» или «Переслать» ( replyItem.after(copyButton);) для лучшей интеграции с нативным меню Telegram. Если такой пункт не найден, используется appendChild.

menuEl.remove(): Закомментировал руководство menuEl.remove(), так как собственная обработка контекстного меню Telegram обычно удаляет его, а вмешательство может привести к неожиданному поведению.

Флаги обработки, специфичные для приложения :

Изменено _tel_processedна _tel_processed_zи _tel_processed_kдля сообщений и _tel_processed_z_contextи _tel_processed_k_contextдля контекстных меню. Это гарантирует, что флаги обработки будут разными для каждой версии приложения Telegram Web (Z и K), предотвращая потенциальные конфликты или некорректную обработку при смене пользователем приложения или запуске скрипта в гибридной среде.

Селектор элементов текста сообщения (App-K) :

В App-K Specific Logic, добавлено .message-textк textElселектору запроса: ".message-text, .message .text-content, .message .translatable-message". Это охватывает больше случаев для элементов текста сообщения в Web K.

Эти улучшения делают скрипт более надежным, удобным для пользователя и лучше интегрированным с веб-приложениями Telegram.СЛАВА УКРАИНА