YouTube Resume Playback

Запоминает позицию просмотра видео и возобновляет с этого места (минус 5 секунд)

目前为 2025-04-20 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name YouTube Resume Playback
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.0
  5. // @description Запоминает позицию просмотра видео и возобновляет с этого места (минус 5 секунд)
  6. // @author YourName
  7. // @match https://www.youtube.com/watch*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Функция для получения ID видео из URL
  16. function getVideoId() {
  17. const urlParams = new URLSearchParams(window.location.search);
  18. return urlParams.get('v');
  19. }
  20.  
  21. // Функция для сохранения времени просмотра
  22. function saveVideoTime(videoId, currentTime) {
  23. localStorage.setItem(`yt_time_${videoId}`, currentTime.toString());
  24. }
  25.  
  26. // Функция для загрузки сохраненного времени
  27. function loadVideoTime(videoId) {
  28. const savedTime = localStorage.getItem(`yt_time_${videoId}`);
  29. return savedTime ? parseFloat(savedTime) : 0;
  30. }
  31.  
  32. // Основная функция
  33. function init() {
  34. const video = document.querySelector('video');
  35. if (!video) return;
  36.  
  37. const videoId = getVideoId();
  38. if (!videoId) return;
  39.  
  40. // Загружаем сохраненное время
  41. const savedTime = loadVideoTime(videoId);
  42. if (savedTime > 0) {
  43. // Устанавливаем время на 5 секунд раньше сохраненного
  44. const resumeTime = Math.max(0, savedTime - 5);
  45. video.currentTime = resumeTime;
  46. }
  47.  
  48. // Сохраняем время каждые 5 секунд
  49. setInterval(() => {
  50. if (!video.paused) {
  51. saveVideoTime(videoId, video.currentTime);
  52. }
  53. }, 5000);
  54.  
  55. // Сохраняем время при закрытии страницы
  56. window.addEventListener('beforeunload', () => {
  57. saveVideoTime(videoId, video.currentTime);
  58. });
  59. }
  60.  
  61. // Ждем когда видео будет готово
  62. const checkVideo = setInterval(() => {
  63. if (document.querySelector('video')) {
  64. clearInterval(checkVideo);
  65. init();
  66. }
  67. }, 500);
  68. })();