Intereting Posts
Как проверить правильное доменное имя и поддомен в php как отображать изображения из базы данных в php? Вставка изображения с помощью PHP и FPDF, не удалось загрузить большое изображение Как бы вы преобразовали ранее существующее веб-приложение в многоязычный? Как полностью интегрировать XMPP на веб-сайт с зарегистрированными пользователями Как использовать $ this -> _ () в представлениях среды zend? PHP Regexp отрицательный lookahead Как проверить, обновлен ли composer.lock? Отображение данных из двух таблиц с отношением «многие ко многим» с использованием PHP / CodeIgniter Создание векторной графики с помощью PHP Почему запросы отправки php5-fpm медленны, в то время как тот же php-cli-код / ​​консольный завиток работает очень быстро? PHP не может найти драйвер MongoDB Yii Записывает таблицу, но не все выбранные данные извлекаются Реализация аутентификации Facebook Kohana 3.3 Не работает из подкаталога

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

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

Solutions Collecting From Web of "Обнаружение программного обеспечения AdBlocking?"

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

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

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

var user_is_leecher = true;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

https://github.com/retargetly/mockingbird

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

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

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

 mockingbird.adsBlocked(Obj) 

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

Удачи тебе !