Telegram Web — перемотка + сохранение прогресса видео

Перемотка видео стрелками и восстановление по автору и времени

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

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

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

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

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

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

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

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

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

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

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

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

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

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

作者
STELLAR STELS
日安装量
0
总安装量
5
评分
0 0 0
版本
1.1
创建于
2025-07-29
更新于
2025-07-29
大小
6.5 KB
许可证
MIT
适用于

Основные улучшения и исправления:
Надежный выбор элемента:

Улучшены селекторы для nameElи dateElдля поддержки различных версий приложения Telegram Web ( web.telegram.orgvs. webk.telegram.orgvs. webz.telegram.org) путем добавления нескольких имен классов.

Селектор mediaViewerсделан более универсальным ( .media-viewer-modal, .media-viewer-backdrop), чтобы надежно определять, когда открыто средство просмотра мультимедиа.

При обработке событий клавиатуры скрипт сначала пытается найти видео в активном средстве просмотра медиафайлов ( .media-viewer-content video). Если видео не найдено или не отображается, скрипт возвращается к любому видимому видео на странице.

Эффективное сохранение прогресса:

Вместо того, setIntervalчтобы вызывать его при каждом обнаружении видео, используется Map( ) для хранения и управления идентификаторами. Это гарантирует, что для каждого уникального видео (идентифицируемого по ключу ) в любой момент времени будет запущен только один идентификатор.activeIntervalssetIntervalsetIntervalname @ date videoSrc

В setIntervalнастоящее MutationObserverвремя активно проверяется, относится ли видео к paused, ended, или !isVisible(video). При выполнении любого из этих условий интервал для этого видео очищается, предотвращая ненужную фоновую активность.

Прогресс сохраняется только в том случае, если currentTimeс момента последнего сохранения время изменилось более чем на 1 секунду, что позволяет сократить количество ненужных localStorageзаписей.

Обработка событий клавиатуры:

Добавлена проверка if (document.activeElement && (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA'))для предотвращения перемотки, когда пользователь вводит текст в поле.

Логика перемотки ( video.currentTime = Math.max(0, Math.min(newTime, video.duration || newTime));) теперь ограничивает время currentTime, чтобы гарантировать, что оно не опустится ниже 0 или не превысит фактическую продолжительность видео.

Перемотка происходит только в том случае, если видео воспроизводится в данный момент ( !video.paused && !video.ended).

Надежность локального хранилища:

Добавлены try...catchблоки вокруг localStorage.getItemи localStorage.setItemдля корректной обработки потенциальных ошибок (например, SecurityErrorв некоторых изолированных средах или при ограничениях квот).

Уникальные видеоключи:

Для keyсохранения хода видео теперь используется videoSrc( ${name} @ ${date} ${videoSrc}). Это крайне важно, поскольку в противном случае разные видео одного автора в одну и ту же дату будут перезаписывать ход друг друга.

Флаг восстановления прогресса:

Изменено video.dataset.restoredна video.dataset.tgProgressRestoredдля большей конкретности и избежания потенциальных конфликтов с другими скриптами или собственными атрибутами Telegram.

Ведение журнала:

Добавлены более подробные console.logсообщения для лучшего отслеживания действий скрипта (например, когда он начинает/останавливает сохранение прогресса, когда он восстанавливает прогресс).

Небольшие уточнения:

Определены константы для REWIND_TIME_SECONDSи SAVE_PROGRESS_INTERVAL_MSдля более простой настройки.

Добавлено для более window.getComputedStyle(el).display !== 'none'полной isVisibleпроверки видимости.

Этот обновленный скрипт более устойчив к изменениям в DOM Telegram, более эффективен в использовании ресурсов и обеспечивает лучший пользовательский интерфейс.СЛАВА УКРАИНА