Created
September 10, 2013 11:16
-
-
Save ETiV/6507991 to your computer and use it in GitHub Desktop.
YouTube Repeater 的 UserScript
在YouTube上开启洗脑循环
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name YouTube Repeater | |
// @namespace ETiV | |
// @include http://www.youtube.com/watch?v=* | |
// @version 1 | |
// ==/UserScript== | |
(function(){ | |
var player = null, run_state = 0, repeat_state = false; | |
var btnTogglePlayState = document.createElement('button'); | |
const HTML_PLAY = '<span>▶</span>', | |
HTML_PAUSE = '<span style="display:inline-block;transform:rotate(90deg);">〓</span>'; | |
var getPlayer = function () { | |
var _p = document.getElementById('movie_player'); | |
if (_p.getPlayerState() === 1) { | |
player = _p; | |
player.addEventListener('onStateChange', 'onYTStateChange'); | |
run_state = 1; | |
} | |
}; | |
var getDuration = function () { | |
try { | |
if (player) return player.getDuration(); | |
else return -1; | |
} catch (e) { | |
return -1; | |
} | |
}; | |
var getCurrentTime = function () { | |
try { | |
if (player) return player.getCurrentTime(); | |
else return -1; | |
} catch (e) { | |
return -1; | |
} | |
}; | |
var play = function () { | |
try { | |
if (player) player.playVideo(); | |
} catch (e) { | |
} | |
}; | |
var pause = function () { | |
try { | |
if (player) player.pauseVideo(); | |
} catch (e) { | |
} | |
}; | |
// var stop = function () { | |
// try { | |
// if (player) player.stopVideo(); | |
// } catch (e) { | |
// } | |
// }; | |
var state = function () { | |
try { | |
if (player) return player.getPlayerState(); | |
else return -1; | |
} catch (e) { | |
return -1; | |
} | |
}; | |
var seekTo = function (start) { | |
try { | |
if (player) player.seekTo(start, true); | |
} catch (e) { | |
} | |
}; | |
var interval = setInterval(function () { | |
if (run_state === 0 && player === null) { | |
getPlayer(); | |
} else if (run_state === 1) { | |
document.querySelector('#masthead-upload-button-group').style.marginRight = '5px'; | |
btnTogglePlayState.className = 'yt-uix-pager-button yt-uix-pager-show-more yt-uix-button yt-uix-button-default yt-uix-button-size-default'; | |
if (state() == 1) { | |
btnTogglePlayState.innerHTML = HTML_PAUSE; | |
} | |
if (state() == 2) { | |
btnTogglePlayState.innerHTML = HTML_PLAY; | |
} | |
document.querySelector('#masthead-upload-button-group').appendChild(btnTogglePlayState); | |
btnTogglePlayState.onclick = function () { | |
if (state() == 1) { | |
pause(); | |
} else if (state() == 2) { | |
play(); | |
} | |
}; | |
var btnToggleRepeat = document.createElement('button'); | |
btnToggleRepeat.className = 'yt-uix-pager-button yt-uix-pager-show-more yt-uix-button yt-uix-button-default yt-uix-button-size-default'; | |
btnToggleRepeat.innerHTML = '<span style="display:inline-block;transform:rotate(90deg);">8</span>:' + (repeat_state?'ON':'OFF'); | |
document.querySelector('#masthead-upload-button-group').appendChild(btnToggleRepeat); | |
btnToggleRepeat.onclick = function () { | |
repeat_state = !repeat_state; | |
btnToggleRepeat.innerHTML = '<span style="display:inline-block;transform:rotate(90deg);">8</span>:' + (repeat_state?'ON':'OFF'); | |
if (repeat_state === true && state() === 0) { | |
play(); | |
} | |
}; | |
clearInterval(interval); | |
} | |
}, 500); | |
// NOTE : this `onYTStateChange` must be set in the global scope, | |
// because the event listener registered to youtube player need this name as string | |
// to invoke the certain event | |
window['onYTStateChange'] = function(state){ | |
if (state === 0 && repeat_state) { | |
play(); | |
} else { | |
if (state == 1) { | |
btnTogglePlayState.innerHTML = HTML_PAUSE; | |
} | |
if (state == 2) { | |
btnTogglePlayState.innerHTML = HTML_PLAY; | |
} | |
} | |
}; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment