Обнаруживаете программное обеспечение для блокировки рекламы?

StackOverflow https://stackoverflow.com/questions/1185067

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

var user_is_leecher = true;

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

Теперь шутка:они просто доверяют Adblock Plus, чтобы отфильтровать этот скрипт, поскольку все, что там есть: 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 такого-то загружал ли какие-либо изображения?" и таким образом получить ответ.Но я сомневаюсь, что такие сервисы существуют - это было бы намного проще сделать на стороне клиента.

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

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

https://github.com/retargetly/mockingbird

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

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

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

mockingbird.adsBlocked(Obj)

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

Желаю тебе удачи !

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

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

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

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

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

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

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

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

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

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

<?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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top