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

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

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

Author
STELLAR STELS
Daily installs
0
Total installs
9
Ratings
0 0 0
Version
1.1
Created
2025-07-29
Updated
2025-07-29
Size
6.53 KB
License
MIT
Applies to

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

Улучшены селекторы для 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, более эффективен в использовании ресурсов и обеспечивает лучший пользовательский интерфейс.СЛАВА УКРАИНА