YT Embed Control Message Receiver

Control Embedded YT iFrames with postMessage

  1. // ==UserScript==
  2. // @name YT Embed Control Message Receiver
  3. // @namespace salembeats
  4. // @version 1.2
  5. // @description Control Embedded YT iFrames with postMessage
  6. // @author Cuyler Stuwe (salembeats)
  7. // @include https://www.youtube.com/embed/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. function showOverlay() {
  12. let overlayDiv = document.createElement("DIV");
  13. overlayDiv.style.position = "fixed";
  14. overlayDiv.style.left = "50%";
  15. overlayDiv.style.transform = "translateX(-50%)";
  16. overlayDiv.style.top = "0px";
  17. overlayDiv.style.zIndex = Number.MAX_SAFE_INTEGER;
  18. overlayDiv.style.backgroundColor = "black";
  19. overlayDiv.style.color = "white";
  20. overlayDiv.style.pointerEvents = "none";
  21. overlayDiv.innerText = "Cuyler's YT Embed Control Message Receiver";
  22. document.body.insertAdjacentElement('afterend', overlayDiv);
  23. }
  24.  
  25. function playAtDoubleSpeed() {
  26. let settingsButton = document.querySelector(".ytp-settings-button");
  27. settingsButton.click();
  28.  
  29. document.querySelectorAll(".ytp-menuitem-content").forEach( function(el) {
  30. if( el.textContent.includes("Normal") ) {
  31. el.click();
  32. return;
  33. }
  34. });
  35.  
  36. document.querySelectorAll(".ytp-menuitem-label").forEach( function(el) {
  37. if( el.textContent.includes("2") ) {
  38. el.click();
  39. return;
  40. }
  41. });
  42. }
  43.  
  44. (function main() {
  45. showOverlay();
  46. playAtDoubleSpeed();
  47.  
  48. e = window;
  49. while (e.frameElement !== null) {e = e.parent;}
  50. e.parent.focus();
  51. })();