Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name YouTube Ad Cleaner (Smart Resume)
- // @namespace SebaARG22
- // @version 3.4.0
- // @description Skips YouTube ads, resumes video after ad is closed, but respects manual pauses completely.
- // @author SebaARG22
- // @match *://www.youtube.com/*
- // @run-at document-end
- // @grant none
- // ==/UserScript==
- (function () {
- 'use strict';
- const LOG = msg => console.log(`[😠CryTubeFix] ${msg}`);
- let lastAdTime = 0;
- let lastPauseTime = 0;
- const video = () => document.querySelector('video');
- function handleAdSkipAndResume() {
- const skipButton = document.querySelector('.ytp-ad-skip-button');
- const closeButton = document.querySelector('.ytp-ad-overlay-close-button');
- let didAdAction = false;
- if (skipButton) {
- skipButton.click();
- lastAdTime = Date.now();
- LOG('Clicked "Skip Ad" button.');
- didAdAction = true;
- }
- if (closeButton) {
- closeButton.click();
- lastAdTime = Date.now();
- LOG('Closed overlay ad.');
- didAdAction = true;
- }
- const v = video();
- const now = Date.now();
- if (v && v.paused && (now - lastAdTime < 1500) && (now - lastPauseTime < 1500)) {
- // Resume only if pause happened right after ad
- v.play().then(() => {
- LOG('Resumed video after auto ad pause.');
- }).catch(err => {
- LOG('Could not resume video: ' + err);
- });
- }
- }
- // Detect manual pauses (via spacebar or clicking)
- document.addEventListener('keydown', e => {
- if (e.code === 'Space') {
- lastPauseTime = Date.now();
- }
- });
- document.addEventListener('click', () => {
- const v = video();
- if (v && v.paused) {
- lastPauseTime = Date.now();
- }
- });
- const observer = new MutationObserver(() => {
- handleAdSkipAndResume();
- });
- observer.observe(document.body, { childList: true, subtree: true });
- setInterval(handleAdSkipAndResume, 1000);
- LOG('Smart YouTube ad remover and resume script loaded.');
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement