Skip to content

Instantly share code, notes, and snippets.

@mrkskwsnck
Forked from kwasmich/Skip YouTube Ads.js
Created December 30, 2022 12:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrkskwsnck/5633f0c64947458b73a8c9f742cda3b8 to your computer and use it in GitHub Desktop.
Save mrkskwsnck/5633f0c64947458b73a8c9f742cda3b8 to your computer and use it in GitHub Desktop.
Script for Userscripts browser extension to skip ads on Youtube.
// ==UserScript==
// @name Skip YouTube Ads
// @description This is your new file, start writing code
// @match *://*.youtube.com/*
// ==/UserScript==
function skipAd() {
const adPlaying = document.body.querySelector(".ad-showing");
if (!adPlaying) {
console.info("ad not found");
return;
}
const button = document.querySelector(".ytp-ad-skip-button-text");
if (button) {
button?.click();
console.info("skip ad button clicked");
return;
}
const video = document.querySelector("video");
if (video) {
video.currentTime = video.duration - 1;
video.playbackRate = 20;
console.info("ad video skipped");
}
}
function connect() {
const targetNode = document.body;
// Options for the observer (which mutations to observe)
const config = { attributes: true, childList: true, subtree: true };
observer.observe(targetNode, config);
}
// Callback function to execute when mutations are observed
function callback(mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for (const mutation of mutationsList) {
if (mutation.type === "attributes" && mutation.attributeName === "class" && mutation.target.classList.contains("ad-showing")) {
observer.disconnect();
console.info("skipping ad …");
setTimeout(skipAd, 500);
setTimeout(connect, 2000);
}
}
};
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
connect();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment