(function() { 'use strict'; // === Block known ad domains === const blockedHosts = [ 'ads.vidsrc.me', 'imasdk.googleapis.com', 'googlesyndication.com', 'doubleclick.net', 'adnxs.com', 'vidplay.site/banner', 'vidsrc.to/ads' // example patterns ]; // Block fetch requests const originalFetch = window.fetch; window.fetch = function(...args) { if (blockedHosts.some(host => args[0].includes(host))) { console.log('[AdGuard] Blocked fetch:', args[0]); return new Promise(() => {}); // Block request } return originalFetch.apply(this, args); }; // Block XHR requests const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function(method, url, ...rest) { if (blockedHosts.some(host => url.includes(host))) { console.log('[AdGuard] Blocked XHR:', url); return; } return originalOpen.call(this, method, url, ...rest); }; // === Remove footer and overlay ads visually === function removeAdElements() { const adSelectors = [ '.ad', '#ads', '[id^="ad-"]', '.adsbygoogle', '.overlay-ads', '.video-ads', 'iframe[src*="ads"]', 'iframe[src*="doubleclick.net"]', 'div[class*="banner"]', '.vads', '.vidsrc-ad' // custom class if any ]; adSelectors.forEach(selector => { document.querySelectorAll(selector).forEach(el => el.remove()); }); } // Remove ads on load and repeatedly in case of dynamic loading window.addEventListener('load', () => { removeAdElements(); setInterval(removeAdElements, 3000); }); })();