Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Remove Adblock Thing
- // @namespace http://tampermonkey.net/
- // @version 5.3
- // @description Removes Adblock Thing
- // @author JoelMatic
- // @match https://www.youtube.com/*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
- // @updateURL https://github.com/TheRealJoelmatic/RemoveAdblockThing/raw/main/Youtube-Ad-blocker-Reminder-Remover.user.js
- // @downloadURL https://github.com/TheRealJoelmatic/RemoveAdblockThing/raw/main/Youtube-Ad-blocker-Reminder-Remover.user.js
- // @grant none
- // ==/UserScript==
- (function()
- {
- //
- // Config
- //
- // Enable The Undetected Adblocker
- const adblocker = true;
- // Enable The Popup remover (pointless if you have the Undetected Adblocker)
- const removePopup = false;
- // Checks for updates (Removes the popup)
- const updateCheck = true;
- // Enable debug messages into the console
- const debugMessages = true;
- // Enable custom modal
- // Uses SweetAlert2 library (https://cdn.jsdelivr.net/npm/sweetalert2@11) for the update version modal.
- // When set to false, the default window popup will be used. And the library will not be loaded.
- const updateModal = {
- enable: true, // if true, replaces default window popup with a custom modal
- timer: 5000, // timer: number | false
- };
- //
- // CODE
- //
- // If you have any suggestions, bug reports,
- // or want to contribute to this userscript,
- // feel free to create issues or pull requests in the GitHub repository.
- //
- // GITHUB: https://github.com/TheRealJoelmatic/RemoveAdblockThing
- //
- // Varables used for adblock
- //
- // Store the initial URL
- let currentUrl = window.location.href;
- // Used for if there is ad found
- let isAdFound = false;
- //used to see how meny times we have loopped with a ad active
- let adLoop = 0;
- //
- // Button click
- //
- const event = new PointerEvent('click', {
- pointerId: 1,
- bubbles: true,
- cancelable: true,
- view: window,
- detail: 1,
- screenX: 0,
- screenY: 0,
- clientX: 0,
- clientY: 0,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- button: 0,
- buttons: 1,
- width: 1,
- height: 1,
- pressure: 0.5,
- tiltX: 0,
- tiltY: 0,
- pointerType: 'mouse',
- isPrimary: true
- });
- //
- // Variables used for updater
- //
- let hasIgnoredUpdate = false;
- //
- // Setup
- //
- //Set everything up here
- log("Script started");
- if (adblocker) removeAds();
- if (removePopup) popupRemover();
- if (updateCheck) checkForUpdate();
- // Remove Them pesski popups
- function popupRemover() {
- setInterval(() => {
- const modalOverlay = document.querySelector("tp-yt-iron-overlay-backdrop");
- const popup = document.querySelector(".style-scope ytd-enforcement-message-view-model");
- const popupButton = document.getElementById("dismiss-button");
- var video = document.querySelector('video');
- const bodyStyle = document.body.style;
- bodyStyle.setProperty('overflow-y', 'auto', 'important');
- if (modalOverlay) {
- modalOverlay.removeAttribute("opened");
- modalOverlay.remove();
- }
- if (popup) {
- log("Popup detected, removing...");
- if(popupButton) popupButton.click();
- popup.remove();
- video.play();
- setTimeout(() => {
- video.play();
- }, 500);
- log("Popup removed");
- }
- // Check if the video is paused after removing the popup
- if (!video.paused) return;
- // UnPause The Video
- video.play();
- }, 1000);
- }
- // undetected adblocker method
- function removeAds()
- {
- log("removeAds()");
- var videoPlayback = 1;
- setInterval(() =>{
- var video = document.querySelector('video');
- const ad = [...document.querySelectorAll('.ad-showing')][0];
- //remove page ads
- if (window.location.href !== currentUrl) {
- currentUrl = window.location.href;
- removePageAds();
- }
- if (ad)
- {
- isAdFound = true;
- adLoop = adLoop + 1;
- log("adLoop: " + adLoop);
- // If we tried 15 times we can assume it won't work this time (This stops the weird pause/freeze on the ads)
- if(adLoop >= 5){
- //set the add to half to press the skip button
- if (video.currentTime != undefined || video.currentTime > 0.10){
- if(video.currentTime < (video.duration / 2)){
- let randomNumber = Math.floor(Math.random() * 2) + 1;
- //video.currentTime = (video.duration / 2) + randomNumber || 0;
- video.playbackRate = 10 - randomNumber;
- }
- }
- }
- //
- // ad center method
- //
- if(adLoop <= 5){
- if (video) video.pause();
- const openAdCenterButton = document.querySelector('.ytp-ad-button-icon');
- openAdCenterButton?.dispatchEvent(event);
- const blockAdButton = document.querySelector('[label="Block ad"]');
- blockAdButton?.dispatchEvent(event);
- const blockAdButtonConfirm = document.querySelector('.Eddif [label="CONTINUE"] button');
- blockAdButtonConfirm?.dispatchEvent(event);
- const closeAdCenterButton = document.querySelector('.zBmRhe-Bz112c');
- closeAdCenterButton?.dispatchEvent(event);
- if (video) video.play();
- }
- var popupContainer = document.querySelector('body > ytd-app > ytd-popup-container > tp-yt-paper-dialog');
- if (popupContainer){
- // popupContainer persists, lets not spam
- if (popupContainer.style.display == "")
- popupContainer.style.display = 'none';
- }
- //
- // Speed Skip Method
- //
- log("Found Ad");
- //This is beacuse youtube keeps changing the class of the skip button for what ever reason
- let skipButtons = [
- 'ytp-ad-skip-button-container',
- 'ytp-ad-skip-button-modern',
- '.videoAdUiSkipButton',
- '.ytp-ad-skip-button',
- '.ytp-ad-skip-button-modern',
- '.ytp-ad-skip-button',
- '.ytp-ad-skip-button-slot',
- 'ytp-skip-ad-button',
- 'skip-button'
- ];
- const elementsWithSkipButton = document.querySelectorAll('[class*="skip-button"]');
- const classesFromElements = Array.from(elementsWithSkipButton).map(element => element.className.split(' ')).flat();
- const uniqueClassesFromElements = [...new Set(classesFromElements)];
- skipButtons = [...new Set([...skipButtons, ...uniqueClassesFromElements])];
- if (video){
- //Seems to beh patched and gets dectected
- //video.playbackRate = 10;
- video.volume = 0;
- // Iterate through the array of selectors
- skipButtons.forEach(selector => {
- // Select all elements matching the current selector
- const elements = document.querySelectorAll(selector);
- // Check if any elements were found
- if (elements && elements.length > 0) {
- // Iterate through the selected elements and click
- elements.forEach(element => {
- element?.dispatchEvent(event);
- });
- }
- });
- video.play();
- //Seems to beh patched and gets dectected
- }
- log("skipped Ad (✔️)");
- } else {
- //check for unreasonale playback speed
- if(video && video?.playbackRate == 10){
- video.playbackRate = videoPlayback;
- }
- if (isAdFound){
- isAdFound = false;
- // this is right after the ad is skipped
- // fixes if you set the speed to 2x and an ad plays, it sets it back to the default 1x
- //somthing bugged out default to 1x then
- if (videoPlayback == 10) videoPlayback = 1;
- if(video && isFinite(videoPlayback)) video.playbackRate = videoPlayback;
- //set ad loop back to the defualt
- adLoop = 0;
- }
- else{
- if(video) videoPlayback = video.playbackRate;
- }
- }
- }, 50)
- removePageAds();
- }
- //removes ads on the page (not video player ads)
- function removePageAds(){
- const sponsor = document.querySelectorAll("div#player-ads.style-scope.ytd-watch-flexy, div#panels.style-scope.ytd-watch-flexy");
- const style = document.createElement('style');
- style.textContent = `
- ytd-action-companion-ad-renderer,
- ytd-display-ad-renderer,
- ytd-video-masthead-ad-advertiser-info-renderer,
- ytd-video-masthead-ad-primary-video-renderer,
- ytd-in-feed-ad-layout-renderer,
- ytd-ad-slot-renderer,
- yt-about-this-ad-renderer,
- yt-mealbar-promo-renderer,
- ytd-statement-banner-renderer,
- ytd-ad-slot-renderer,
- ytd-in-feed-ad-layout-renderer,
- ytd-banner-promo-renderer-background
- statement-banner-style-type-compact,
- .ytd-video-masthead-ad-v3-renderer,
- div#root.style-scope.ytd-display-ad-renderer.yt-simple-endpoint,
- div#sparkles-container.style-scope.ytd-promoted-sparkles-web-renderer,
- div#main-container.style-scope.ytd-promoted-video-renderer,
- div#player-ads.style-scope.ytd-watch-flexy,
- ad-slot-renderer,
- ytm-promoted-sparkles-web-renderer,
- masthead-ad,
- tp-yt-iron-overlay-backdrop,
- #masthead-ad {
- display: none !important;
- }
- `;
- document.head.appendChild(style);
- sponsor?.forEach((element) => {
- if (element.getAttribute("id") === "rendering-content") {
- element.childNodes?.forEach((childElement) => {
- if (childElement?.data.targetId && childElement?.data.targetId !=="engagement-panel-macro-markers-description-chapters"){
- //Skipping the Chapters section
- element.style.display = 'none';
- }
- });
- }
- });
- log("Removed page ads (✔️)");
- }
- //
- // Update check
- //
- function checkForUpdate(){
- if (window.top !== window.self && !(window.location.href.includes("youtube.com"))){
- return;
- }
- if (hasIgnoredUpdate){
- return;
- }
- const scriptUrl = 'https://raw.githubusercontent.com/TheRealJoelmatic/RemoveAdblockThing/main/Youtube-Ad-blocker-Reminder-Remover.user.js';
- fetch(scriptUrl)
- .then(response => response.text())
- .then(data => {
- // Extract version from the script on GitHub
- const match = data.match(/@version\s+(\d+\.\d+)/);
- if (!match) {
- log("Unable to extract version from the GitHub script.", "e")
- return;
- }
- const githubVersion = parseFloat(match[1]);
- const currentVersion = parseFloat(GM_info.script.version);
- if (githubVersion <= currentVersion) {
- log('You have the latest version of the script. ' + githubVersion + " : " + currentVersion);
- return;
- }
- console.log('Remove Adblock Thing: A new version is available. Please update your script. ' + githubVersion + " : " + currentVersion);
- if(updateModal.enable){
- // if a version is skipped, don't show the update message again until the next version
- if (parseFloat(localStorage.getItem('skipRemoveAdblockThingVersion')) === githubVersion) {
- return;
- }
- // If enabled, include the SweetAlert2 library
- const script = document.createElement('script');
- script.src = 'https://cdn.jsdelivr.net/npm/sweetalert2@11';
- document.head.appendChild(script);
- const style = document.createElement('style');
- style.textContent = '.swal2-container { z-index: 2400; }';
- document.head.appendChild(style);
- // Wait for SweetAlert to be fully loaded
- script.onload = function () {
- Swal.fire({
- position: "top-end",
- backdrop: false,
- title: 'Remove Adblock Thing: New version is available.',
- text: 'Do you want to update?',
- showCancelButton: true,
- showDenyButton: true,
- confirmButtonText: 'Update',
- denyButtonText:'Skip',
- cancelButtonText: 'Close',
- timer: updateModal.timer ?? 5000,
- timerProgressBar: true,
- didOpen: (modal) => {
- modal.onmouseenter = Swal.stopTimer;
- modal.onmouseleave = Swal.resumeTimer;
- }
- }).then((result) => {
- if (result.isConfirmed) {
- window.location.replace(scriptUrl);
- } else if(result.isDenied) {
- localStorage.setItem('skipRemoveAdblockThingVersion', githubVersion);
- }
- });
- };
- script.onerror = function () {
- var result = window.confirm("Remove Adblock Thing: A new version is available. Please update your script.");
- if (result) {
- window.location.replace(scriptUrl);
- }
- }
- } else {
- var result = window.confirm("Remove Adblock Thing: A new version is available. Please update your script.");
- if (result) {
- window.location.replace(scriptUrl);
- }
- }
- })
- .catch(error => {
- hasIgnoredUpdate = true;
- log("Error checking for updates:", "e", error)
- });
- hasIgnoredUpdate = true;
- }
- // Used for debug messages
- function log(log, level = 'l', ...args) {
- if (!debugMessages) return;
- const prefix = 'Remove Adblock Thing:'
- const message = `${prefix} ${log}`;
- switch (level) {
- case 'e':
- case 'err':
- case 'error':
- console.error(message, ...args);
- break;
- case 'l':
- case 'log':
- console.log(message, ...args);
- break;
- case 'w':
- case 'warn':
- case 'warning':
- console.warn(message, ...args);
- break;
- case 'i':
- case 'info':
- default:
- console.info(message, ...args);
- break
- }
- }
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement