Программное обеспечение Detecting AdBlocking?

Я удивлен, что нет никакого упоминания еще об этой книге: Стартовый Forth, Leo Brodie. После того, как весь Forth, будучи стековым языком, должен соответствовать аудитории на этом сайте...

По общему признанию, Forth является странным языком и не очень популярный в эти дни. Но эта книга является радостью для чтения. И это имеет мультфильмы! Книга, а также другая книга Brodie, Интеллектуальный Forth, оба доступна бесплатно в сети.

13
задан Luc M 26 July 2009 в 18:02
поделиться

6 ответов

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

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

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

var user_is_leecher = true;

Далее идет тег внешнего скрипта: src = checkabp? Thisistotrickabp = *** адрес рекламного партнера ***

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

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

30
ответ дан 1 December 2019 в 17:42
поделиться

You could do it on server side by pairing requests for html pages and for the acording ads (probably with some unique identifiers to each request ...) ... But this is just an idea, i've never tried it and never even seen it used.

3
ответ дан 1 December 2019 в 17:42
поделиться

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

/*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*/
3
ответ дан 1 December 2019 в 17:42
поделиться

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

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

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

2
ответ дан 1 December 2019 в 17:42
поделиться

I don't think there is an easy way to do this. What you can do is to create "trap". Make a php script listen to a very obvious url like yourdomain.com/ad.png. You can probably achieve this by url rewriting. If this page is loaded you can note this in a session variable and send back a 1x1 blank png.

On the next request you can see whether ad.png has been loaded. If it hasn't you can guess that the client is using some form of AdBlock software. Make sure you set the appropriate http headers to prevent clients from caching "ad.png".

This is the only server side approach I can think of at the moment and it has some flaws.

  • The png file can be cached regardless of the http headers
  • This will not work for the first http request
  • Some extra server load as browsers will keep hitting ad.png for each request
  • That the image gets loaded from the server is no guarantee for it actually being displayed
  • Probably more side effects that I haven't thought of

Please make a comment on this post if you decide to try it out.

Regarding a client side solution. This shouldn't be to difficult. You can create a tiny Javascript to run on page load complete. This script can check that the page contains the dom-nodes holding the ads. If you this when the page is loaded completely (not only the dom) you can check the width and height of your ad images. The most obvious drawback with this solution is that clients can disable javascripts.

1
ответ дан 1 December 2019 в 17:42
поделиться

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

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

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

1
ответ дан 1 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: