YouTube - Mute Ads

Automatically mutes VideoAds

  1. // ==UserScript==
  2. // @name YouTube - Mute Ads
  3. // @name:de YouTube - Mute Ads
  4. // @version 2.0.0
  5. // @description Automatically mutes VideoAds
  6. // @description:de Schaltet Werbung auf YouTube automatisch stumm
  7. // @autor VVind0wM4ker
  8. // @namespace https://github.com/VVind0wM4ker/Userscripts
  9. // @homepageURL https://github.com/VVind0wM4ker/Userscripts/tree/master/YouTube_Mute_Ads
  10. // @license MIT License
  11. // @grant none
  12. // @noframes
  13. // @include http*://*.youtube.com/watch*
  14. // ==/UserScript==
  15.  
  16. var adHandled = false;
  17. var playerMutedBefore;
  18.  
  19. // ----- Setters and Getters -----
  20. // Getter functions instead of vars to prevent getting old elements
  21. // in case of navigation for example
  22. function getVideo() {
  23. return document.getElementsByClassName("video-stream html5-main-video")[0];
  24. }
  25. function getPlayer() {
  26. return document.getElementsByClassName("html5-video-player")[0];
  27. }
  28. function getMuteBtn() {
  29. if (getPlayer()) {
  30. return getPlayer().querySelector("button.ytp-mute-button");
  31. }
  32. return null;
  33. }
  34. function isAdInterrupting() {
  35. if (getPlayer()) {
  36. return getPlayer().className.indexOf("ad-interrupting");
  37. }
  38. return null;
  39. }
  40. // -------------------------------
  41.  
  42. function hook() {
  43. // add eventlistener if userscript started before the site finished loading
  44. if (document.readyState == "loading") {
  45. document.addEventListener("DOMContentLoaded", function() {hook();});
  46. return;
  47. }
  48. // site loaded
  49.  
  50. // detect navigation on the site
  51. document.body.addEventListener("yt-navigate-finish", function() {setup();});
  52. setup();
  53. }
  54.  
  55. function setup() {
  56. // prevent mess if setup() is called more than once
  57. if (getVideo().onplay === null) {
  58. getVideo().onplay = function() {analVideo();};
  59. }
  60. }
  61.  
  62. // ( ͡° ͜ʖ ͡°)
  63. function analVideo() {
  64. if (isAdInterrupting() !== -1 && adHandled === false ) {
  65. adHandled = true;
  66. playerMutedBefore = getPlayer().isMuted();
  67. getPlayer().mute();
  68. }
  69. else if (isAdInterrupting() === -1 && adHandled === true) {
  70. adHandled = false;
  71. if (playerMutedBefore === false) {
  72. getPlayer().unMute();
  73. } else {
  74. getPlayer().mute();
  75. }
  76. }
  77. }
  78.  
  79. hook();