- Firefox-Version
- Firefox 129 Nightly
- Betriebssystem
- Windows 10
Seit vor 3 Tagen das o.a. Script aktualisiert wurde, sind die Größen Miniplayer, Kinomodus verschwunden.
CSS
// ==UserScript==
// @name Remove Adblock Thing
// @namespace http://tampermonkey.net/
// @version 5.6
// @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;
// Fix timestamps in the youtube comments for new method
const fixTimestamps = 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 after the player is updated
let isVideoPlayerModified = false;
//
// Variables used for updater
//
let hasIgnoredUpdate = false;
//
// Setup
//
//Set everything up here
log("Script started");
if (adblocker) removeAds();
if (removePopup) popupRemover();
if (updateCheck) checkForUpdate();
if (fixTimestamps) timestampFix();
// 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
// undetected adblocker method
function removeAds() {
log("removeAds()");
setInterval(() => {
if (window.location.href !== currentUrl) {
currentUrl = window.location.href;
isVideoPlayerModified = false;
clearAllPlayers();
removePageAds();
}
// Fix for youtube shorts
if (window.location.href.includes("shorts")) {
log("Youtube shorts detected, ignoring...");
return;
}
if (isVideoPlayerModified){
removeAllDuplicateVideos();
return;
}
log("Video replacement started!");
//
// remove ad audio
//
var video = document.querySelector('video');
if (video) video.volume = 0;
if (video) video.pause();
if (video) video.remove();
//
// Remove the current player
//
if (!clearAllPlayers()) {
return;
}
/**
* remove the "Ad blockers violate YouTube's Terms of Service" screen for safari
*/
let errorScreen = document.querySelector("#error-screen");
if (errorScreen) {
errorScreen.remove();
}
//
// Get the video ID from the URL
//
let videoID = '';
let playList = '';
let timeStamp = '';
const url = new URL(window.location.href);
const urlParams = new URLSearchParams(url.search);
if (urlParams.has('v')) {
videoID = urlParams.get('v');
} else {
const pathSegments = url.pathname.split('/');
const liveIndex = pathSegments.indexOf('live');
if (liveIndex !== -1 && liveIndex + 1 < pathSegments.length) {
videoID = pathSegments[liveIndex + 1];
}
}
if (urlParams.has('list')) {
playList = "&listType=playlist&list=" + urlParams.get('list');
}
if (urlParams.has('t')) {
timeStamp = "&start=" + urlParams.get('t').replace('s', '');
}
if (!videoID) {
log("YouTube video URL not found.", "e");
return null;
}
log("Video ID: " + videoID);
//
// Create new frame for the video
//
const startOfUrl = "https://www.youtube-nocookie.com/embed/";
const endOfUrl = "?autoplay=1&modestbranding=1&rel=0";
const finalUrl = startOfUrl + videoID + endOfUrl;
const iframe = document.createElement('iframe');
iframe.setAttribute('src', finalUrl);
iframe.setAttribute('frameborder', '0');
iframe.setAttribute('allow', 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share');
iframe.setAttribute('allowfullscreen', true);
iframe.setAttribute('mozallowfullscreen', "mozallowfullscreen");
iframe.setAttribute('msallowfullscreen', "msallowfullscreen");
iframe.setAttribute('oallowfullscreen', "oallowfullscreen");
iframe.setAttribute('webkitallowfullscreen', "webkitallowfullscreen");
iframe.style.width = '100%';
iframe.style.height = '100%';
iframe.style.position = 'absolute';
iframe.style.top = '0';
iframe.style.left = '0';
iframe.style.zIndex = '9999';
iframe.style.pointerEvents = 'all';
const videoPlayerElement = document.querySelector('.html5-video-player');
videoPlayerElement.appendChild(iframe);
log("Finished");
isVideoPlayerModified = true;
}, 500);
removePageAds();
}
//
// logic functionm
//
function removeAllDuplicateVideos() {
const videos = document.querySelectorAll('video');
videos.forEach(video => {
if (video.src.includes('www.youtube.com')) {
video.muted = true;
video.pause();
video.addEventListener('volumechange', function() {
if (!video.muted) {
video.muted = true;
video.pause();
log("Video unmuted detected and remuted");
}
});
video.addEventListener('play', function() {
video.pause();
log("Video play detected and repaused");
});
log("Duplicate video found and muted");
}
});
}
function clearAllPlayers() {
const videoPlayerElements = document.querySelectorAll('.html5-video-player');
if (videoPlayerElements.length === 0) {
console.error("No elements with class 'html5-video-player' found.");
return false;
}
videoPlayerElements.forEach(videoPlayerElement => {
const iframes = videoPlayerElement.querySelectorAll('iframe');
iframes.forEach(iframe => {
iframe.remove();
});
});
console.log("Removed all current players!");
return true;
}
//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 (✔️)");
}
function changeTimestamp(timestamp) {
const videoPlayerElements = document.querySelectorAll('.html5-video-player');
videoPlayerElements.forEach(videoPlayerElement => {
const iframes = videoPlayerElement.querySelectorAll('iframe');
iframes.forEach(iframe => {
if (iframe.src.includes("&start=")) {
iframe.src = iframe.src.replace(/&start=\d+/, "&start=" + timestamp);
} else {
iframe.src += "&start=" + timestamp;
}
});
});
}
function timestampFix() {
document.addEventListener('click', function(event) {
const target = event.target;
if (target.classList.contains('yt-core-attributed-string__link') && target.href.includes('&t=')) {
event.preventDefault();
const timestamp = target.href.split('&t=')[1].split('s')[0];
log(`Timestamp link clicked: ${timestamp} seconds`);
changeTimestamp(timestamp);
}
});
}
function observerCallback(mutations) {
let isVideoAdded = mutations.some(mutation =>
Array.from(mutation.addedNodes).some(node => node.tagName === 'VIDEO')
);
if (isVideoAdded) {
log("New video detected, checking for duplicates.");
// Ignore for youtube shorts
if (window.location.href.includes("shorts")) {
log("Youtube shorts detected, ignoring...");
return;
}
removeAllDuplicateVideos();
}
}
const observer = new MutationObserver(observerCallback);
observer.observe(document.body, { childList: true, subtree: true });
//
// 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, ...args) {
if(!debugMessages)
return;
const prefix = '🔧 Remove Adblock Thing:';
const message = `${prefix} ${log}`;
switch (level) {
case 'error':
console.error(`❌ ${message}`, ...args);
break;
case 'log':
console.log(`✅ ${message}`, ...args);
break;
case 'warning':
console.warn(`⚠️ ${message}`, ...args);
break;
default:
console.info(`ℹ️ ${message}`, ...args);
}
}
})();
Alles anzeigen
Könnte ein Findiger dies aus dem Script wieder entfernen?
Ggf. liegt es daran, dass ich Violentmonkey nutze? Das war schon früher mal ein Problem. Da mussten Kleinigkeiten im Code angepasst werden.