Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Makes the YouTube shortcuts work even if the player is not focused. Install Greasemonkey/Tampermonkey first, then click [Raw] to install.
// ==UserScript==
// @name YouTube global shortcuts
// @namespace https://gist.github.com/stefansundin/
// @homepage https://gist.github.com/stefansundin/65e3d6db697636d8e7f1
// @downloadURL https://gist.github.com/stefansundin/65e3d6db697636d8e7f1/raw/youtube-global-shortcuts.user.js
// @version 1.1
// @author Stefan Sundin
// @description Makes the YouTube shortcuts work even if the player is not focused.
// @icon https://www.youtube.com/favicon.ico
// @match https://www.youtube.com/*
// ==/UserScript==
// Space = Pause/play
// F = Toggle fullscreen
// M = Toggle mute
// P = Previous video (if in playlist)
// N = Next video (if in playlist)
// left and right keys focuses the button, but the first keydown won't trigger seeking unfortunately
// P and N already works without this userscript, but you must hold shift.
// Use Ctrl+Space to scroll down, Shift+Space to scroll up
window.addEventListener('keydown', function(e) {
var button = document.getElementsByClassName('ytp-play-button')[0] || document.getElementById('movie_player');
if (!button) return;
console.log(e);
// Skip if in comment reply form, or search field
if (['TEXTAREA','INPUT'].indexOf(e.srcElement.tagName) !== -1 || ['yt-commentbox-text','yt-simplebox-text'].indexOf(e.srcElement.className) !== -1) return;
var c = String.fromCharCode(e.keyCode).toLowerCase();
if (c == ' ' || e.keyCode == 37 || e.keyCode == 39) { // 37 = left key, 39 = right key
if (c == ' ' && (e.shiftKey || e.ctrlKey)) return;
if (e.srcElement != button) {
button.focus();
if (c == ' ') button.click();
}
}
else if (c == 'n') {
document.getElementsByClassName('ytp-next-button')[0].click();
}
else if (c == 'p') {
document.getElementsByClassName('ytp-prev-button')[0].click();
}
});

You're the bomb, man. I found a few older scripts that weren't working so I dug into the markup a bit and noticed the individual buttons had ids, which Googling one of them led me here! Saved me a bit of time, thank you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment