// ==UserScript== // @name netflix-speed // @version 0.1 // @include https://www.netflix.com/* // ==/UserScript== function find_controls() { return new Promise(function(resolve, reject) { var observer = new MutationObserver(function(mutationsList) { mutationsList.forEach(function(mutation) { var nodes = Array.from(mutation.addedNodes); for (var node of nodes) { if (node.parentNode && node.parentNode.matches && node.parentNode.matches('.PlayerControlsNeo__controls-group')) { observer.disconnect(); resolve(node.parentNode); return; } } }); }); observer.observe(document.documentElement, { childList: true, subtree: true }); }); } function inject_controls() { find_controls().then(function(controls) { var speed_control = document.createElement('select'); speed_control.style.cssText = ` border: none; cursor: pointer; background: none; -moz-appearance: none; -webkit-appearance: none; appearance: none; font-size: 1.96em; padding-bottom: 0.84em; `; speed_control.onchange = function() { document.querySelector('.VideoContainer video').playbackRate = this.value; }; speed_control.innerHTML = ` `; controls.appendChild(speed_control); inject_controls(); }); }; inject_controls();