YoutubePlayBack

Have you ever closed a YouTube video by accident, or have you gone to another one and when you come back the video starts from 0? With this extension it won't happen anymore

目前为 2024-02-16 提交的版本。查看 最新版本

// ==UserScript==
// @license MIT
// @name         YoutubePlayBack
// @namespace    http://tampermonkey.net/
// @version      1.1.2
// @description  Have you ever closed a YouTube video by accident, or have you gone to another one and when you come back the video starts from 0? With this extension it won't happen anymore
// @author       Costin Alexandru Sandu
// @match        https://www.youtube.com/watch*
// @icon         https://tse4.mm.bing.net/th/id/OIG3.UOFNuEtdysdoeX0tMsVU?pid=ImgGn
// @grant        none
// ==/UserScript==

(function() {
   	'strict'

	var savedProgressAlreadySet = false

  	function executeFnInPageContext (fn) {
      const fnStringified = fn.toString()
    	return window.eval('('+fnStringified+')'+'()')
    }

  	function getVideoCurrentTime () {
      const currentTime = executeFnInPageContext(() => {
      	const player = document.querySelector('#movie_player')
				return player.getCurrentTime()
      })
      return currentTime
    }

  	function getVideoId () {
    	const id = executeFnInPageContext(() => {
      	const player = document.querySelector('#movie_player')
				return player.getVideoData().video_id
      })
      return id
    }

  	function playerExists () {
     	const exists = executeFnInPageContext(() => {
      	const player = document.querySelector('#movie_player')
				return Boolean(player)
      })
      return exists
    }

  	function setVideoProgress (progress) {
      window.eval('var progress ='+ progress)
     	executeFnInPageContext(() => {
      	const player = document.querySelector('#movie_player')
		player.seekTo(window.progress)
      })
      window.eval('delete progress')
    }

  	function saveVideoProgress() {
      const videoProgress = getVideoCurrentTime()
      const videoId = getVideoId()
      window.localStorage.setItem(videoId, videoProgress)
    }

  	function getSavedVideoProgress() {
      const videoId = getVideoId()
      const savedVideoProgress = window.localStorage.getItem(videoId)

      return savedVideoProgress
    }

  	function logError(message) {
     	console.log('[YoutubeRememberLastTime] '+message)
    }
    function setSavedProgress () {
        const savedProgress = getSavedVideoProgress();
        setVideoProgress(savedProgress)
        savedProgressAlreadySet = true
    }

    function isReadyToSetSavedProgress () {
        return !savedProgressAlreadySet && playerExists() && getSavedVideoProgress()
    }

  	function main() {
      if (isReadyToSetSavedProgress()) {
          setSavedProgress()
      }
      saveVideoProgress()
    }

  	function initialize() {
        if (isReadyToSetSavedProgress()) {
            setSavedProgress()
        }
    	setInterval(main, 1500)
    }

  	initialize()
})();