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

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

作者
STELLAR STELS
日安装量
0
总安装量
3
评分
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, более эффективен в использовании ресурсов и обеспечивает лучший пользовательский интерфейс.СЛАВА УКРАИНА