Skip to content

Instantly share code, notes, and snippets.

@4v3ngR
Last active March 27, 2024 15:50
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save 4v3ngR/cf0141421570388f2814076443c1c385 to your computer and use it in GitHub Desktop.
Save 4v3ngR/cf0141421570388f2814076443c1c385 to your computer and use it in GitHub Desktop.
Block youtube ads in Safari with userscripts
// ==UserScript==
// @name Youtube adblock
// @namespace http://tampermonkey.net/
// @version 0.2
// @description enough with the ads!
// @author 4v3ngR
// @match https://*.youtube.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @grant none
// @run-at document-start
// ==/UserScript==
// Patches the ads for cold loading
(function() {
var ytInitialPlayerResponse = null;
function getter() {
return ytInitialPlayerResponse;
}
function setter(data) {
ytInitialPlayerResponse = { ...data, adPlacements: [] };
}
if (window.ytInitialPlayerResponse) {
Object.defineProperty(window.ytInitialPlayerResponse, 'adPlacements', {
get: () => [],
set: (a) => undefined,
configurable: true
});
} else {
Object.defineProperty(window, 'ytInitialPlayerResponse', {
get: getter,
set: setter,
configurable: true
});
}
})();
// FETCH POLYFILL
(function() {
const {fetch: origFetch} = window;
window.fetch = async (...args) => {
const response = await origFetch(...args);
if (response.url.includes('/youtubei/v1/player')) {
const text = () =>
response
.clone()
.text()
.then((data) => data.replace(/adPlacements/, 'odPlacement'));
response.text = text;
return response;
}
return response;
};
})();
// OTHER STUFF - just in case an ad gets through
(function() {
window.autoClick = setInterval(function() {
try {
const btn = document.querySelector('.videoAdUiSkipButton,.ytp-ad-skip-button')
if (btn) {
btn.click()
}
const ad = document.querySelector('.ad-showing');
if (ad) {
document.querySelector('video').playbackRate = 10;
}
} catch (ex) {}
}, 100);
window.inlineAdsInterval = setInterval(function() {
try {
const div = document.querySelector('#player-ads');
if (div) {
div.parentNode.removeChild(div);
}
} catch (ex) {}
}, 500);
})();
@jadedgnome
Copy link

thanks!

@Koli95
Copy link

Koli95 commented Dec 4, 2023

How to install this script on MacOS Safari

@dilipisharagh
Copy link

@Koli95 Use Meddlemonkey!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment