Настройка обнаружения блокировщика рекламы у пользователя

При заходе пользователя на страницу, партнеру (площадке) необходимо определить наличие или отсутствие AdBlock-приложения у пользователя. Рекомендуется сделать это с помощью готового решения (скрипта) от Яндекса.

Скрипт — автономный детектор блокировщика рекламы с минимальной функциональностью. При запуске он загружает расширенную версию библиотеки. Библиотека обнаруживает множество блокировщиков с помощью разных методов.

Плюсы использования готового решения от Яндекса

  • Наличие загружаемой и автоматически обновляемой библиотеки — больше не надо самостоятельно периодически менять код обнаружения блокировщика на страницах вашей площадки.

  • Более гибкая настройка обнаружения для каждого домена (на основе написанных для него правил).

  • Если ссылка с расширенной версией библиотеки будет заблокирована, скрипт-загрузчик все равно поймет, что у пользователя установлен блокировщик рекламы, и проставит cookie наличия AdBlock-приложения.

  • Скрипт-загрузчик может самостоятельно проставлять cookie наличия AdBlock-приложения, TTL и имя cookie.

  • В случае обнаружения факта отключения AdBlock-приложения, cookie автоматически удаляется при следующих действиях: закрытие браузера, переход на другую страницу, закрытие вкладки.

Встраивание скрипта в код партнера

Скрипт необходимо встраивать в код одним из способов:

  • методом inline в теле страницы: спрятать код среди кода другого важного скрипта, вставленного таким же образом;

  • методом inline в один из своих скриптов, загружаемых по ссылке.

Внимание

Скрипт, который маскирует скрипт-загрузчик, должен обладать важной логикой, тогда AdBlock-приложению будет сложно заблокировать такой скрипт без ущерба для сайта. В качестве скрипта для маскировки не подходят скрипты Яндекс.Метрики или Google Analytics.

!function(){var x,r,v=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~",n=["C2vSzG==","DgfNCW==","y2fSBgjHy2S=","mI4XlJa=","yMLUza==","rNvUy3rPB24=","w29IAMvJDcbbCNjHEv0=","z2v0uMvZCg9UC2vizwfKzxi=","zxzLBNruExbL","C2XPy2u=","D2L0AenYzwrLBNrPywXZ","zNjVBunOyxjdB2rL","y29UDgv4Da==","C2v0sxrLBq==","yNjVD3nLCG==","y29TlNrY","Bg9HzgLUzW==","Bg9JyxrPB24=","sgvHzgvYigXLBMD0AcbKB2vZBID0ig1HDgnO","vw5RBM93BG==","C2vUza==","CMvTB3zLrxzLBNrmAxn0zw5LCG==","zgv2AwnL","zxzLBNrFzgv0zwn0x0LoteLorq==","zg9TywLU","weHsignVBNn0CNvJDg9YigvYCM9Y","ywfIx2rLDgvJDa==","oYbtyw1Lu2L0zt1oB25LoYbZzwn1CMu=","yMvLCMTH","DMfSDwu=","AwmTBw9UlNLHBG==","DgLTzq==","AgfZt3DUuhjVCgvYDhK=","weHsiefou1DfuG==","Aw5MCMfTzq==","Aw4UDwe=","Dg9gAxHLza==","y3LJywrH","y29TlMDL","Aw5KzxHpzG==","C3rHy2S=","weHsifjfuvvfu1q=","yKHwA1KYrt0=","sLnptG==","C2v0vgLTzw91Da==","u3rYAw5N","ywrKrxzLBNrmAxn0zw5LCG==","Dg9vventDhjPBMC=","u3rHDhvZoIa=","weHsihjLCxvLC3qGzxjYB3i=","C3bSAxq=","r0vu","Bg9JywXtDg9YywDL","yMXVy2TLCG==","Ahr0Chm6lY9ZDgf0","B25LCNjVCG==","CMvHzhLtDgf0zq==","C2vUzejLywnVBG==","re9difjfqurz","su5msu5f","veLnru9vva==","CNq/CM5Kpte=","zgv0zwn0x0LoteLorq==","werVBwfPBLjLCxvLC3q=","C3rLChm=","ChvZAa==","DMvYC2LVBG==","we1mshr0CfjLCxvLC3q=","Dg9tDhjPBMC=","oYbWyxrOps87igrVBwfPBJ0U","yMX0C3i=","BMfTzq==","Ag9ZDg5HBwu=","zg9JDw1LBNrnB2rL","y29UDgvUDc1Szw5NAhq=","yMvMB3jLDw5SB2fK","y29TCgXLDgu=","Dg9W","C2vYDMLJzq==","zgf0yq==","Dhj1C3rLza==","oYbLEhbPCMvZpq==","ywrKAxrPB25HBa==","C3rYAw5NAwz5","u1rbuLq=","zg9ty3jVBgW=","AM9PBG==","ic0G","tNvTyMvY","BgfIzwXZ","zg9JDw1LBNrfBgvTzw50","AgfUzgXLrxzLBNq=","BwvZC2fNzq==","DgLTzw91Da==","y2XLyxjuAw1LB3v0","y29VA2LL","CgfNzwHPzgu=","vu5ltK9xtG==","vgLTzw91Da==","ChjVDg90ExbL","CMvZCg9UC2vuzxH0","zxzLBNroyw1L","zxzLBNq=","zxHWAxjLCW==","ue9tva==","y28UAwW=","tK9ux0jmt0nlruq=","rgf0zq==","z2v0q29TChv0zwrtDhLSzq==","BhvKy2e=","y2fSBa==","zNvUy3rPB24=","CgLK","AhjLzG==","vfjvu1rfrcbysfiGqu5tv0vs","weHsievsuKjbq0S=","zgv4lM5LDc9HzhzL","y29TlMfT","yNrVyq==","B3bLBG==","re9nieXpqurfra==","zwXLBwvUDa==","re9nq29UDgvUDeXVywrLza==","weHsigz1BMn0Aw9UCYb3zxjLihjLyxnZAwDUzwq=","DgLTzxn0yw1W","C3rHDhvZvgv4Da==","rxjYB3iGD2HPBguGC3vIC2nYAwjPBMCGre9nq29UDgvUDeXVywrLza==","y2HHCKnVzgvbDa==","rw1WDhKGy29UzMLNlNnYyW==","Aw5PDa==","BMf2AwDHDg9Y","C3jJ","B25SB2fK","yMXVy2TLza==","BgvUz3rO","BxnRlNj1","C3bIlNj1"];x=n,r=331,function(r){for(;--r;)x.push(x.shift())}(++r);var f=function(x,r){var t=n[x-=0];if(void 0===f.fjMWDF){f.WQNDVb=function(x){for(var r,n,f=function(x){for(var r,n,f=String(x).replace(/=+$/,""),t="",a=0,L=0;n=f[L++]||"";~n&&(r=a%4?64*r+n:n,a++%4)?t+=v[(255&r>>(-2*a&6))-32]:0)n="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=".indexOf(n);return t}(x),t=[],a=0,L=f.length;a<L;a++)t+="%"+("00"+(r=f,n=a,v.indexOf(r[n])+32).toString(16)).slice(-2);return decodeURIComponent(t)},f.tLLiBy={},f.fjMWDF=!0}var a=f.tLLiBy[x];return void 0===a?(t=f.WQNDVb(t),f.tLLiBy[x]=t):t=a,t};!function(x,r,v){var n=f,t={};for(var a in v)v[n("0x70")](a)&&(t[a]=v[a]);var L=[n("0x5f"),n("0x76"),n("0x3c"),n("0x30"),n("0x4e"),n("0x4f"),n("0x73")],e=x[n("0x6")]||x[n("0xa")],z=n("0x4a"),u=n("0x17"),w=n("0x26"),i=n("0x6f"),c=n("0x5c"),y=n("0x52"),B=n("0x75"),g=n("0x6c"),D=n("0x34"),o=n("0x7a"),C=[n("0x86"),n("0x6e"),n("0x3b"),n("0x4")][n("0x1d")]("");t[w]=t[w]||n("0xd");try{({})[n("0xb")][n("0x35")](t[w])!==n("0x56")&&(t[w]=[t[w]])}catch(x){}t[i]=t[i]||336,t[c]=t[c]||{};var h=t[y];if(t[y]=K,t[z]){var M=t[z],j=t[u],A=[],N=T();try{if(!s(x[n("0x7e")])||!s(x[n("0x33")])||!s(x[n("0x55")][n("0x2a")][n("0x54")])||r[n("0x10")]&&r[n("0x10")]<=10){var b={};return b[n("0x4c")]=!1,b[n("0x85")]=n("0x31"),void K(b)}}catch(x){}var d,q,H,U,l,Y=null;t[n("0x24")]&&(d=function(){var x=n;G(x("0x3")),X(x("0x29"))},q=2e4,H=T(),U=null,l=!1,function r(){var v=f;l||(T()-H>=q?d():U=x[v("0x7c")]((function(){r()}),100))}(),Y=function(){l=!0,x[f("0x25")](U)}),function(x){var v=n;if(G(v("0x1b")),r[v("0x88")]===v("0x13")||r[v("0x88")]!==v("0x60")&&!r[v("0x21")][v("0x1c")])G(v("0x1")),x();else try{var f={};f[v("0x22")]="",r[v("0x7e")](v("0x41"),f),r[v("0x7e")](v("0x41"),(function n(){var f=v;G(f("0x3f")),r[f("0x65")](f("0x41"),n),x()}))}catch(x){G(v("0x45")),X(x&&x[v("0x78")])}}((function(){var v=n;try{var f=T();G(v("0x79")),W(M,(function(n){var f=v;try{Y&&Y(),G(f("0x71"));var a=x[f("0x1f")](n[f("0x57")](f("0x11"))),L=n[f("0x2b")][f("0x4d")];if(!a||a<32e3||a!==L)return X(f("0x62"),a+f("0x1e")+L);new(x[f("0x55")])(n[f("0x2b")])[f("0x35")](t[c]),t[c][f("0x48")](x,r,t)}catch(x){X(x&&x[f("0x23")])}}),(function(x,r){var n=v;try{if(Y&&Y(),G(n("0x3a")),T()-f<2e3)j?W(j,(function(){G(n("0x39")),X(x,r)}),(function(){var x=n,r={};r[x("0x4c")]=!1,r[x("0x85")]=x("0x31"),K(r)})):X(x,r);else{var t={};t[n("0x4c")]=!1,t[n("0x85")]=n("0x31"),K(t)}}catch(x){X(x&&x[n("0x23")])}}))}catch(x){X(x&&x[v("0x78")])}}))}else X(n("0x47"));function G(x){var r=n,v={};v.d=x,v.t=T()-N,A[r("0x8")](v)}function s(x){return typeof x===n("0x36")}function T(){var r=n;return x[r("0x1f")](new(x[r("0x32")]))}function V(r,v,f){var t,a,L=n;try{if(x[L("0x84")]){if(f){var e=(t=n,a=24e5,((T()/a)[t("0x74")]()*a)[t("0xb")](36)[t("0x59")](0,10));v=x[L("0x3d")](e)+o+x[L("0x3d")](function(r,v){for(var f=n,t=[],a=0;a<r[f("0x4d")];a++){var L=r[f("0x46")](a)^v[f("0x46")](a%v[f("0x4d")]);t[f("0x8")](x[f("0x7d")][f("0x5b")](L))}return t[f("0x1d")]("")}(v,e))}x[L("0x84")][L("0x5d")](r,v)}}catch(x){}}function K(x){var r=n("0x53");h&&h(x,r),V(g,r)}function P(x,r){var v=n;return r?x[v("0x82")](".")[v("0x59")](-r)[v("0x1d")]("."):x}function X(v,f){var a=n,z=T(),u=new(x[a("0x32")])(z+36e5*t[i])[a("0x7f")](),c=[],y=P(x[a("0x61")][a("0xf")],2);function g(){for(var x=a,v=0;v<c[x("0x4d")];v++){var n=c[v];r[x("0x26")]=n[x("0xe")]+"="+n[x("0x6d")]+x("0x18")+n[x("0x2e")]+x("0xc")+n[x("0x68")]+x("0x6b")}}-1!==L[a("0x77")](y)&&(y=P(x[a("0x61")][a("0xf")],3));for(var o=t[w],h=0;h<o[a("0x4d")];h++){var M={};M[a("0xe")]=o[h],M[a("0x6d")]=1,M[a("0x2e")]=u,M[a("0x68")]=y,c[a("0x8")](M)}var j,N=function(x){for(var v=n,f=r[v("0x26")][v("0x82")]("; "),t=0;t<f[v("0x4d")];t++){var a=f[t][v("0x82")]("=");if(a[0]===x)return a[v("0x59")](1)[v("0x1d")]("=")}return null}(B);if(N){r[a("0x26")]=B+"="+N+a("0xc")+y+a("0x6b");var b={};b[a("0xe")]=B,b[a("0x6d")]=N,b[a("0x2e")]=new(x[a("0x32")])(0)[a("0x7f")](),b[a("0x68")]=y,c[a("0x8")](b)}try{var d={};d[a("0x22")]="",x[a("0x7e")](a("0x12"),d),x[a("0x7e")](a("0x12"),g),x[a("0x7e")](a("0x27"),g)}catch(x){g()}try{(function(r,v){var f=n,t={};t[f("0x9")]=f("0x53"),t[f("0x40")]=r,t[f("0x19")]=v,t[f("0x72")]=x[f("0x14")]!==x[f("0x50")],t[f("0x7")]=A;var a={};a[f("0x5e")]=f("0x63"),a[f("0x66")]=f("0x63"),a[f("0x85")]=f("0x2"),a[f("0x37")]=f("0x63"),a[f("0x40")]="i0",a[f("0x9")]="1";var L={};L[f("0x67")]=1;var z={};z[f("0x16")]=t,z[f("0x20")]=a,z[f("0x51")]=L,z[f("0x61")]=x[f("0x61")][f("0x38")],z[f("0x43")]=T(),z[f("0x15")]=f("0x6a"),z[f("0x2c")]=f("0x5"),z[f("0x58")]=f("0x2d"),z[f("0x6d")]=1,z[f("0x9")]="1";var u=z,w=x[f("0x7b")][f("0x1a")](u);if(s(x[f("0x49")][f("0x0")]))x[f("0x49")][f("0x0")](C,w);else{var i=new e;i[f("0x3e")](f("0x2f"),C,!0),i[f("0x64")](w)}})(v,f=f||""),V(D,[(new(x[a("0x32")]))[a("0x7f")](),a("0x28"),v,f,(j=n,x[j("0x61")]?typeof x[j("0x61")][j("0xb")]===j("0x36")?x[j("0x61")][j("0xb")]():x[j("0x61")][j("0x38")]||"":"")][a("0x1d")]("\n"),!0)}catch(x){}var q={};q[a("0x4c")]=!0,q[a("0x85")]=a("0x28"),K(q)}function W(x,r,v){var f=n,t=new e;if(0!==t[f("0x88")])throw new Error(f("0x69"));if(t[f("0x3e")](f("0x83"),x,!0),1!==t[f("0x88")]||t[f("0x64")]!==e[f("0x2a")][f("0x64")])throw new Error(f("0x42"));t[f("0x5a")]=!0,t[f("0x4b")]=function(){r(t)},t[f("0x87")]=function(){var x=f;v(x("0x81"),x("0x80")+t[x("0x44")])},t[f("0x64")]()}}(window,document,{
    src: "https://static-mon.yandex.net/static/main.js?pid=<PARTNER-ID>",
    cookie: "somecookie",
    callback: aab
})}();

function aab(result) {
    if (result.blocked === true) {
        // AdBlocker present.
    } else {
        // No AdBlocker.
    }
};

Параметры скрипта

Параметр

Обязательность

Описание

src

Да

Ссылка на расширенную версию библиотеки, которую необходимо загрузить. Ссылка всегда остается неизменной, меняется только значение query-параметра pid.

<PARTNER-ID>

Да

Уникальный идентификатор партнера. Выдается в процессе подключения.

cookie

Нет

Имя или массив имен cookie, которая устанавливается при наличии AdBlock-приложения. Значение по умолчанию: имя — bltsr, TTL — 14 дней.

script

Нет

Флаг. Устанавливается, если нужно защитить static-mon шифрованием от замен в теле ответа. В этом случае загрузчик запросит основную часть через jsonp. Допустимые значения: true или false. Значение по умолчанию: false.

callback

Нет

Callback-функция, которая вызывается после определения наличия или отсутствия блокировщика рекламы. В функцию передается результат работы скрипта — объект result в формате
{blocked: true/false, blocker: 'ADBLOCK_EXTENSION_ID'}

Примечание

Время обнаружения блокировщика рекламы может быть длительным (процесс обнаружения не блокирует основной поток работы браузера), потому что часть блокировщиков начинают работу не сразу или блокируют только определенные ресурсы.

Использование совместно с Content Security Policy (CSP)

Если вы используете какие-либо ограничения, заданные с помощью CSP, то запрос расширенной версии библиотеки может блокироваться CSP-политиками (например, директивой connect-src). В таком случае добавьте домен static-mon.yandex.net в список доверенных.