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
当前为
// ==UserScript==
// @license MIT
// @name YoutubePlayBack
// @namespace http://tampermonkey.net/
// @version 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 configData = {
savedProgressAlreadySet: false,
savingInterval: 1500,
currentVideoId: null
}
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() {
if (configData.currentVideoId) {
return configData.currentVideoId
}
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()
configData.currentVideoId = videoId
window.localStorage.setItem(videoId, videoProgress)
}
function getSavedVideoProgress() {
const videoId = getVideoId()
const savedVideoProgress = window.localStorage.getItem(videoId)
return savedVideoProgress
}
function setSavedProgress() {
const savedProgress = getSavedVideoProgress();
setVideoProgress(savedProgress)
configData.savedProgressAlreadySet = true
}
function isReadyToSetSavedProgress() {
return !configData.savedProgressAlreadySet && playerExists() && getSavedVideoProgress()
}
function main() {
if (isReadyToSetSavedProgress()) {
setSavedProgress()
}
saveVideoProgress()
}
function initialize() {
if (isReadyToSetSavedProgress()) {
setSavedProgress()
}
setInterval(main, configData.savingInterval)
}
initialize()
})();