(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);
});
})();