正在检测AdBlocking软件?

问题描述 投票:14回答:10

[我最近正在访问a site,并且注意到该页面上有一个部分,指出我正在使用AdBlocking软件,请关掉它以帮助支持这样的小型网站。我只是想知道你会怎么做?最好在客户端或服务器端完成吗?

php jquery adblock
10个回答
31
投票

这是服务器端根本无法完成的事情-人们急切地敲门说“看看我,我有AdblockPlus!”。在客户端时,adblock正在积极尝试影响页面内容,您可以看到这种情况,并且看到他们正在使用adblocker。

无论如何,我碰巧知道newgrounds.com也正在这样做。 (他们的新布局为adblock plus用户搞砸了-作为回应,他们进行了最佳竞赛,“如果您不打算通过我们的广告来帮助我们,请去商店购买东西”横幅。

快速浏览newgrounds的源告诉我,他们正在使用一些简单的javascript来做到这一点。首先在文件中:

var user_is_leecher = true;

接下来有一个外部脚本标签:src=checkabp?thisistotrickabp=***adress of ad affilliate***

现在开个玩笑:他们只是信任adblock plus来过滤掉该脚本,因为其中包含的全部是:user_is_leecher = false;

[从那里,他们几乎可以做任何事情。


0
投票

您可以将javascript代码添加到您的页面,只有在没有adblocker时(例如,使用“ ad”作为变量名,使用“ ad.js”作为文件名。此代码将ajax事件发送到服务器,并说“此用户未使用adlocker”。因此,如果您没有收到该事件,则说明该用户正在阻止广告,甚至完全禁止javascript。


7
投票

这里提到的所有方法都依赖于广告拦截器来剥离代码。这不适用于某些adblocker(例如Mac上的NetBarrier)。当adblockers流行起来时,您还必须不断更新代码。

要检测用户是否屏蔽广告,您要做的就是在广告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页面和相应广告的请求配对(可能为每个请求添加一些唯一的标识符...)来完成此操作……但这只是一个主意,我从未尝试过,从未见过它的使用。


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

2
投票

我想有几种方法可以做到,但是最简单的方法可能是拥有某种背景图片或文本,在加载广告时将其替换。因此,如果广告被加载,您将看到广告。如果广告没有加载,您会看到文字。

此示例将是客户端,通过JavaScript或纯CSS都可以满足。

[也许有些服务器端的mm头也可以做到这一点,但是它们不必要地复杂和笨拙。我想到的一种方法是与广告商一起使用某种API,该API可能会被问到“用户是否从IP中加载了这样的图像?然后以这种方式得到答案。但是我怀疑是否有这样的服务-在客户端这样做会容易得多。


2
投票

我相信在客户端比在服务器端容易得多。广告拦截器安装在客户端上,因此它们可以操纵DOM并阻止ajax请求。这就是为什么我认为在客户端上进行检测比在服务器上进行检测更有意义。

无论如何,这是一个独立的简单插件,可以检测启用了广告拦截器的用户,它是开源的,完整代码在github上:

https://github.com/retargetly/mockingbird

它面向发布商,因此他们可以轻松地在广告容器或弹出窗口中显示消息。该插件经常更新,值得一试。这也是小提琴:

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

您唯一需要使用的方法是

mockingbird.adsBlocked(Obj)

该调用可以在代码中的任何地方进行,并且您不需要jQuery即可使其工作。

祝你好运!


1
投票

我认为没有简单的方法可以做到这一点。您可以做的是创建“陷阱”。使php脚本侦听一个非常明显的URL,例如yourdomain.com/ad.png。您可能可以通过url重写来实现。如果加载了此页面,则可以在会话变量中记录下来,并发送回1x1空白png。

在下一个请求时,您可以查看是否已加载ad.png。如果没有,您可以猜测客户端正在使用某种形式的AdBlock软件。确保设置适当的http标头,以防止客户端缓存“ ad.png”。

这是我目前可以想到的唯一的服务器端方法,它有一些缺陷。

  • 无论HTTP标头如何,都可以缓存png文件
  • 这将不适用于第一个http请求
  • 一些额外的服务器负载,因为浏览器将继续为每个请求命中ad.png
  • [从服务器加载图像并不能保证它实际显示
  • 可能我没有想到的更多副作用

如果决定尝试,请对此信息发表评论。

关于客户端解决方案。这应该不难。您可以创建一个微型Javascript以在页面加载完成时运行。该脚本可以检查页面是否包含保存广告的dom节点。如果是这样,当页面完全加载时(不仅是dom),您可以检查广告图像的宽度和高度。此解决方案最明显的缺点是客户端可以禁用JavaScript。


1
投票

这里有一些很好的答案,所以我只添加这个:

使用某些广告管理系统(您可以编写自己的广告)。这样一来,跟踪所显示的每个广告(并使其清晰可见,例如ads.php或showad.php或其他内容)。如果从未调用该脚本,则表明用户正在使用某种形式的广告拦截软件。

不过,请务必通过该处理程序处理每个广告。不需要Mod_Rewrite,可以使用简单的PHP来完成。


0
投票

您可以在服务器端检测adblocker的方法如下:

<?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>
© www.soinside.com 2019 - 2024. All rights reserved.