NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name YouTube FairBlock // @name:de YouTube FairBlock // @version 1.1.0 // @description Mutes and skips ads automatically // @description:de Schaltet Werbung auf YouTube automatisch stumm // @autor VVind0wM4ker // @contributor helq // @namespace https://github.com/VVind0wM4ker/Userscripts // @homepageURL https://github.com/VVind0wM4ker/Userscripts/tree/master/YouTube_FairBlock // @license MIT License // @grant none // @include http*://*.youtube.com/watch* // ==/UserScript== function initScript() { "use strict"; console.log("YouTube FairBlock started"); let adPlaying = 0; let i = 0; let video_ = document.getElementsByClassName("video-stream html5-main-video")[0]; let player_ = document.getElementsByClassName("html5-video-player")[0]; function setup(resume) { if (hasClass(player_, "ad-created") === true) { if (resume !== 1) /* a little trick to only print once */ { console.log("Video has Ads"); } detectAds.observe(player_, config1); video_.onplay = function() { detectAds.disconnect(); setTimeout(function() { setup(1); }, 1000); }; // Wait for Content to load video_.onpause = function() { detectAds.disconnect(); }; } else { console.log("Video has no Ads :)"); return; } } let detectAds = new MutationObserver(function() { console.log("Checking for Showing Ads"); //logTries(); //Test function if (hasClass(player_, "ad-showing") === true) { if (hasClass(player_, "ad-interrupting") === true) { videoAd(); } else { setTimeout(function() { popupAd(); }, 50); } } else { player_.muted = false; // If no add is been shown ensure the video has volume } }); let skipVideo = new MutationObserver(function() { adPlaying = 1; let skipContainer = document.getElementsByClassName("videoAdUiSkipContainer")[0]; let skipAdButton = document.getElementsByClassName("videoAdUiSkipButton"); if (skipAdButton.length > 0 && skipContainer.style.display !== "none") { adPlaying = 0; skipVideo.disconnect(); detectAds.disconnect(); player_.muted = false; // unmutting before skiping ad skipAdButton[0].click(); setTimeout(function() { setup(1); }, 1000); } }); function videoAd() { player_.muted = true; let skipContainer = document.getElementsByClassName("videoAdUiSkipContainer")[0]; let skipAdButtonLen = document.getElementsByClassName("videoAdUiSkipButton").length; if (adPlaying === 0 && skipAdButtonLen > 0) { skipVideo.observe(skipContainer, config2); } } function popupAd() { let closePopup = document.getElementsByClassName("close-button"); if (closePopup.length > 0) { closePopup[0].click(); } } function hasClass(element, cls) { return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1; } function logTries() { document.getElementById("eow-title").innerHTML = i; i++; } let config1 = { attributes: true, childList: false, subtree: false, attributeFilter: ['class'] }; let config2 = { attributes: true, childList: false, subtree: false, }; document.addEventListener("DOMContentLoaded", setup(), false); } initScript();