2009-07-26 4 views
13

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

+8

Я довольно конечно, это возможно только на стороне клиента ... – luiscubal

+0

На самом деле, я думаю, вы можете как-то сделать это и на стороне сервера. Если вы знаете, какой блок ad ** будет блокироваться, он не будет загружен пользователем. Вы можете знать, что он не был загружен. Но это довольно дорогой способ обнаружить это. –

ответ

30

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

В любом случае, мне стало известно, что это также делает newgrounds.com. (Их новый макет был привинчен для Adblock Plus пользователей - в ответ они сделали конкурс на лучшее «если вы не собираетесь, чтобы помочь нам через наши объявления, пойти и купить что-то в магазине» -banner

.

Беглый взгляд на источник Newgrounds сказал мне, что они делают это с некоторыми простыми JavaScript Первый в документе:.

var user_is_leecher = true;

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

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

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

2

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

Этот пример будет на стороне клиента, осуществляется либо JavaScript или просто CSS, возможно, даже достаточно.

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

3

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

3

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

/*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*/ 
1

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

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

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

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

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

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

+0

Этот метод работает, и лучше всего использовать правило перезаписи, чтобы сделать его несовместимым (например,/adverts/ .png) для вашего изображения 1px и указать его на сценарий, который UNSETS задает заданную переменную сеанса и служит для изображения, как ожидалось. Сделайте это прямо в начале макета (прежде чем что-либо важное), и вы можете выбрать, что обслуживать где-нибудь еще. Работает с удовольствием (даже по первым запросам). Вам нужно выбрать правило, которое определенно будет поймано и удалено, хотя ... Разумные пользователи также могут опубликовать ваше объявление в белом списке, хотя в исходном тексте ничего не должно было бы предложить! –

1

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

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

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

5

Все описанные здесь методы полагаются на блокировщики рекламы, чтобы вырезать код. Это не работает для некоторых рекламных блоков (например, 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

+0

Сначала это выглядело как хорошее решение, но когда я его протестировал, он не работал должным образом. Иногда браузер выполняет этот скрипт перед кодом adsende, и я в конечном итоге скрываю свои собственные объявления :( –

+1

Возможно, убедитесь, что код не запускается, пока все закончит загрузку, не устранит вашу проблему: 'window.onload = function() { \t если (TypeOf (window.google_render_ad) == "не определено") \t { \t // Они блокировать рекламу, сделать что-то еще. \t} } ' – Beau

1

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

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

https://github.com/retargetly/mockingbird

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

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

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

mockingbird.adsBlocked(Obj) 

Вызов может быть сделано в коде, и вам не нужно JQuery, чтобы заставить его работать ,

Желаю удачи!

0

Что вы можете сделать, чтобы обнаружить блокировщик рекламы на серверной стороне somithing как:

<?php 

    header('Content-Type: application/javascript'); 

    //Save it to session 
    session_start(); 
    $_SESSION['noAdblocker']=true; 

?> 

noAdblocker=true; 

Сохранить этот файл как ads.php

теперь index.php:

<?php 
    session_start(); 
    $_SESSION['noAdblocker']=false; 
?> 
<!DOCTYPE HTML><html><head> 
    <!-- Now place the "ad-script" --> 
    <script src="ads.php"></script> 
</head><body></body></html> 
Смежные вопросы