YoutubePlayBack

extension for saving and setting last progress in Youtube Videos

当前为 2024-02-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @license MIT
  3. // @name YoutubePlayBack
  4. // @namespace http://tampermonkey.net/
  5. // @version 1.1
  6. // @description extension for saving and setting last progress in Youtube Videos
  7. // @author Costin Alexandru Sandu
  8. // @match https://www.youtube.com/watch*
  9. // @icon https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'strict'
  15.  
  16. var savedProgressAlreadySet = false
  17.  
  18. function executeFnInPageContext (fn) {
  19. const fnStringified = fn.toString()
  20. return window.eval('('+fnStringified+')'+'()')
  21. }
  22.  
  23. function getVideoCurrentTime () {
  24. const currentTime = executeFnInPageContext(() => {
  25. const player = document.querySelector('#movie_player')
  26. return player.getCurrentTime()
  27. })
  28. return currentTime
  29. }
  30.  
  31. function getVideoId () {
  32. const id = executeFnInPageContext(() => {
  33. const player = document.querySelector('#movie_player')
  34. return player.getVideoData().video_id
  35. })
  36. return id
  37. }
  38.  
  39. function playerExists () {
  40. const exists = executeFnInPageContext(() => {
  41. const player = document.querySelector('#movie_player')
  42. return Boolean(player)
  43. })
  44. return exists
  45. }
  46.  
  47. function setVideoProgress (progress) {
  48. window.eval('var progress ='+ progress)
  49. executeFnInPageContext(() => {
  50. const player = document.querySelector('#movie_player')
  51. player.seekTo(window.progress)
  52. })
  53. window.eval('delete progress')
  54. }
  55.  
  56. function saveVideoProgress() {
  57. const videoProgress = getVideoCurrentTime()
  58. const videoId = getVideoId()
  59. window.localStorage.setItem(videoId, videoProgress)
  60. }
  61.  
  62. function getSavedVideoProgress() {
  63. const videoId = getVideoId()
  64. const savedVideoProgress = window.localStorage.getItem(videoId)
  65.  
  66. return savedVideoProgress
  67. }
  68.  
  69. function logError(message) {
  70. console.log('[YoutubeRememberLastTime] '+message)
  71. }
  72. function setSavedProgress () {
  73. const savedProgress = getSavedVideoProgress();
  74. setVideoProgress(savedProgress)
  75. savedProgressAlreadySet = true
  76. }
  77.  
  78. function isReadyToSetSavedProgress () {
  79. return !savedProgressAlreadySet && playerExists() && getSavedVideoProgress()
  80. }
  81.  
  82. function main() {
  83. if (isReadyToSetSavedProgress()) {
  84. setSavedProgress()
  85. }
  86. saveVideoProgress()
  87. }
  88.  
  89. function initialize() {
  90. if (isReadyToSetSavedProgress()) {
  91. setSavedProgress()
  92. }
  93. setInterval(main, 1500)
  94. }
  95.  
  96. initialize()
  97. })();