Обнаружение программного обеспечения AdBlocking?

Недавно я посетил сайт и заметил, что на странице есть раздел, в котором говорится, что я заметил, что я использую программное обеспечение AdBlocking и могу ли я любезно выключите его, чтобы помочь поддерживать такой небольшой сайт. Мне просто интересно, как вы это сделаете? Будет ли это лучше всего на стороне клиента или сервера?

Ответ 1

Это то, чего просто не может быть сделано на стороне сервера - есть причина, по которой человек может постучать в вашу дверь и сказать "Посмотри на меня, у меня есть AdblockPlus!". Когда на стороне клиента adblock активно пытается повлиять на содержимое страницы, что вы видите, и видите, что они используют рекламный блок.

В любом случае, мне стало известно, что это делает newgrounds.com. (их новый макет был прикручен для adblock plus users - в ответ они сделали конкурс на лучшее "если вы не собираетесь помогать нам в наших объявлениях, идите и купите что-нибудь в магазине" - баннер.

Быстрый взгляд на источник новостроек сказал мне, что они делают это с помощью простого javascript. Сначала в документе:

var user_is_leecher = true;

Далее появляется внешний тег script: src=checkabp?thisistotrickabp=***adress of ad affilliate***

Теперь шутка: они просто доверяют adblock плюс фильтровать этот script out, так как все, что в нем есть: user_is_leecher = false;

Оттуда они могут сделать что угодно.

Ответ 2

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

Чтобы определить, блокирует ли пользователь рекламу, вам нужно найти функцию в javascript и попробовать ее проверить. Неважно, какой метод они используют для блокировки объявления. Вот как это выглядит для объявлений Google Adsense:

if(typeof(window.google_render_ad)=="undefined") 
{ 
    //They're blocking ads, do something else.
}

Этот метод описан здесь: http://www.metamorphosite.com/detect-web-popup-blocker-software-adblock-spam

Ответ 3

Вы можете сделать это на стороне сервера, связав запросы на html-страницы и объявления для записи (возможно, с некоторыми уникальными идентификаторами для каждого запроса...)... Но это всего лишь идея, я ее никогда не пробовал и даже не видел, чтобы он использовался.

Ответ 4

Я нашел эту часть в коде, который выглядит так, как они это сделали:

/*MOOTOOLS*/
window.addEvent('domready', function(){

$$('.cat-item').each(function(el) { 
    var fx = new Fx.Morph(el,{ duration:300, link:'cancel' }); 
        el.addEvents({ 
        'mouseenter': function() { fx.start({ 'padding-left': 25 }); }, 
        'mouseleave': function() { fx.start({ 'padding-left': 15 }); } 
        }); 
    });

    if ($$(".google-sense468")[0] && $$(".google-sense468")[0].clientHeight == 0 && $('block-warning')) $('block-warning').setStyle('display','block');

});
/*MOOTOOLS END*/

Ответ 5

Я предполагаю, что есть несколько способов сделать это, но, вероятно, самым простым было бы иметь какое-то фоновое изображение или текст, который будет заменен при загрузке объявления. Таким образом, если объявление загружается, вы видите объявление. Если объявление не загружается, вы увидите текст.

Этот пример будет клиентской стороной, выполняемой либо с помощью JavaScript, либо даже с простым CSS может даже хватить.

Там могут быть некоторые серверные уловки, которые тоже могли бы это сделать, но они были бы излишне сложными и неуклюжими. Один из методов, который приходит на ум, будет включать в себя какой-то API с рекламодателем, которого можно было бы спросить "сделал ли пользователь от IP такой. And.such загрузить какие-либо изображения?" и таким образом получить ответ. Но я сомневаюсь, что такие услуги - на стороне клиента было бы намного проще.

Ответ 6

Я не думаю, что есть простой способ сделать это. Что вы можете сделать, так это создать "ловушку". Сделайте php script прослушайте очень очевидный url, например yourdomain.com/ad.png. Возможно, вы, возможно, достигнете этого путем перезаписи URL. Если эта страница загружена, вы можете отметить это в переменной сеанса и отправить обратно 1x1 пустой png.

В следующем запросе вы можете увидеть, была ли загружена ad.png. Если нет, вы можете догадаться, что клиент использует некоторую форму программного обеспечения AdBlock. Убедитесь, что вы установите соответствующие заголовки HTTP, чтобы клиенты не кэшировали "ad.png".

Это единственный подход на стороне сервера, о котором я могу сейчас думать, и он имеет некоторые недостатки.

  • Файл png можно кэшировать независимо от заголовков http
  • Это не будет работать для первого HTTP-запроса.
  • Некоторая дополнительная загрузка сервера в качестве браузеров будет продолжать атаковать ad.png для каждого запроса.
  • То, что изображение загружается с сервера, не гарантирует его фактическое отображение
  • Вероятно, больше побочных эффектов, о которых я не думал о

Прокомментируйте этот пост, если вы решите попробовать его.

Относительно решения на стороне клиента. Это не должно быть сложно. Вы можете создать крошечный Javascript для завершения загрузки страницы. Этот script может проверить, что страница содержит dom-узлы, содержащие объявления. Если вы, когда страница полностью загружена (не только dom), вы можете проверить ширину и высоту ваших рекламных изображений. Самым очевидным недостатком этого решения является то, что клиенты могут отключить javascripts.

Ответ 7

Несколько хороших ответов здесь, поэтому я просто добавлю следующее:

используйте некоторую систему управления объявлениями (вы можете написать свой собственный). При этом отслеживайте каждое отображаемое объявление (и делайте его очевидным, например ads.php или showad.php или что-то еще). Если этот script никогда не вызывается, пользователь использует НЕКОТОРУЮ форму для блокировки рекламы.

Обязательно обрабатывайте каждое объявление через этот обработчик. Mod_Rewrite не требуется, это можно сделать с помощью простого PHP.

Ответ 8

Я считаю, что гораздо проще сделать это на стороне клиента, чем на стороне сервера. Блокировщики объявлений устанавливаются на клиенте, поэтому они могут манипулировать DOM и блокировать запросы ajax. Вот почему я считаю, что имеет смысл обнаруживать на клиенте, чем на сервере.

В любом случае, это автономный простой плагин, который обнаруживает пользователей с включенными блокировками рекламы, с открытым исходным кодом и полным кодом на github:

https://github.com/retargetly/mockingbird

Это больше ориентировано на издателя, поэтому они могут легко отображать сообщения в контейнерах объявлений или всплывающих окнах. Плагин часто обновляется, и стоит попробовать. Это также скрипка:

http://jsfiddle.net/retargetly/9vsha32h/

Единственный способ, который вам нужно использовать, -

mockingbird.adsBlocked(Obj)

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

Желаю удачи!