// ==UserScript== // @name Блокировщик рекламы вк // @namespace none // @version 3.0 // @description Заблокировать рекламу в вк // @author Dinaco Studio // @match https://*.vk.com/* // @include https://*.vk.com/* // @icon https://www.google.com/s2/favicons?domain=vk.com // @grant GM_webRequest // @webRequest [{"selector":"*://stats.vk-portal.net/web-stats/*","action":"cancel"},{"selector":"*://vk.com/al_audio.php?act=ad_event","action":"cancel"},{"selector":"*://vk.com/ads_rotate.php?act=al_update_ad","action":"cancel"},{"selector":"*://ad.mail.ru/*","action":"cancel"},{"selector":"*://trk.mail.ru/i/*","action":"cancel"},{"selector":"*://top-fwz1.mail.ru/js/code.js","action":"cancel"},{"selector":"*://ad.mail.ru/static/admanhtml/rbadman-html5.min.js","action":"cancel"},{"selector":"*://www.tns-counter.ru/*","action":"cancel"},{"selector":"*://r3.mail.ru/k?*","action":"cancel"},{"selector":"*://vk.com/js/lib/px.js","action":"cancel"}] // @license GNU GPLv3 // @downloadURL none // ==/UserScript== const universal_ads = `.CatalogSection:has(.audio_promo),[class^="ads_ad_"],[class^="ads"],.ads_ads_news_wrap,._ads_promoted_post_data_w,div#left_ads,div[data-ad-view],div[data-ad],div[ads_left],.post[data-ad],.post[data-ad-view],div[id^="postadsite_"],div#ads_left,[data-ad-view],div#games_catalog_header_content,#ads_left,.audio_subscribe_promo__content,#apps_ads_wrap,#ads_special_promo_wrap,#apps_ads_wrap,._ads_promoted_post_data_w,.ads_ads_news_wrap,div#left_ads,.ads_ads_box,.ads_ads_news_wrap,div[id^="vk_ads_"]`; try{ Object.defineProperty(unsafeWindow, 'MotionKit', { value: {}, writable: false, // Запрещает перезапись значения configurable: false // Запрещает изменение дескрипторов свойства }); }catch{ Object.seal(unsafeWindow.MotionKit) Object.assign({}, unsafeWindow.MotionKit) unsafeWindow.MotionKit = {} } unsafeWindow.MotionKit = {} function hookFunction(originalFunction, beforeHook, stopCondition) { return function(...args) { if (typeof beforeHook === 'function') { beforeHook(...args); } // Если условие остановки выполнено, прекращаем выполнение оригинальной функции if (typeof stopCondition === 'function' && stopCondition(...args)) { console.log("JOPA") return; // Можно вернуть значение по умолчанию или бросить ошибку } // Иначе вызываем оригинальную функцию return originalFunction(...args); }; } function waitFor(conditionFn, { interval = 100 } = {}) { return new Promise((resolve, reject) => { const startTime = Date.now(); (function checkCondition() { if (conditionFn()) { resolve(); } else { setTimeout(checkCondition, interval); } })(); }); } window.onload = function() { waitFor(() => typeof unsafeWindow?.stManager?.add !== 'undefined').then(e=>{ unsafeWindow.stManager.add = hookFunction(unsafeWindow.stManager.add,null,function(...args){ return Array.isArray(args) && args?.at(0)?.find(e=>e.match(/ads_light\.js/)) }) }) waitFor(() => typeof unsafeWindow?.vk !== 'undefined').then(e=>{ set(); }) waitFor(() => typeof unsafeWindow?.browser !== 'undefined').then(e=>{ unsafeWindow.browser.ios = true; }) setInterval(block,100) } function set(){ if (typeof unsafeWindow?.vk?.pe == 'undefined') return //unsafeWindow.vk.pe.tgb_adblock_protection = true; unsafeWindow.vk.audioAdsConfig = null; unsafeWindow.browser.ios = true; unsafeWindow.ap.ads._adEvents = []; unsafeWindow.ap.ads._isPlaying = false; unsafeWindow.noAdsAtAll = true unsafeWindow.PageBottomBanners.initUnauthBanner = function () { } unsafeWindow.Unauthorized2 = undefined unsafeWindow.noAds = true unsafeWindow.cur.no_left_ads = true; unsafeWindow.cur.isGamesInRightBlock = false; unsafeWindow.no_ads = true; unsafeWindow.isNoAdsForce = true; unsafeWindow.hide_ad = true unsafeWindow.vk__adsLight.yaDirectAdActive = false; unsafeWindow.ya_direct = false } function block(){ set(); localStorage.setItem("ads.events", null); if (typeof unsafeWindow?.vk !== 'undefined'){ localStorage.setItem("ads.events_@id:"+unsafeWindow.vk.id,null) } let ad_blocks = document.querySelectorAll(universal_ads); for (let ad of ad_blocks){ ad.outerHTML= ''; } }