我最近访问a site并注意到该页面有一个部分说它注意到我正在使用AdBlocking软件,我可以将其关闭以帮助支持这样的小型网站。 我只是想知道你会怎么做?它最好是客户端还是服务器端?
答案 0 :(得分:29)
这是服务器方面根本无法做到的事情 - 有人敲门并说“看着我,我有AdblockPlus!”的原因。在客户端,adblock正在积极尝试影响页面内容,这是您可以看到的,并且看到他们正在使用广告拦截器。
无论如何,我碰巧知道newgrounds.com也是这样做的。 (他们的新布局被搞砸了adblock plus用户 - 作为回应,他们做了最好的竞赛“如果你不打算通过我们的广告帮助我们,去商店买东西”-banner。
快速了解newgrounds的来源告诉我他们正在用一些简单的javascript做这件事。 首先在文件中:
var user_is_leecher = true;
接下来是一个外部脚本标记:src=checkabp?thisistotrickabp=***adress of ad affilliate***
现在开玩笑:他们只是信任adblock plus来过滤掉那个脚本,因为其中的所有内容都是:user_is_leecher = false;
从那里,他们可以做任何事情。
答案 1 :(得分:6)
此处提到的所有方法都依赖于广告拦截器来删除代码。这对某些广告拦截器(如Mac上的NetBarrier)不起作用。当广告拦截器出现时,您还必须不断更新代码。
要检测用户是否阻止了广告,您只需在广告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
答案 2 :(得分:3)
您可以在服务器端通过配对html页面和针对广告的请求(可能每个请求都有一些唯一标识符)来完成... ...但这只是一个想法,我从未尝试过从来没有见过它。
答案 3 :(得分: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*/
答案 4 :(得分:2)
我想有几种方法可以做到这一点,但最简单的方法可能就是在加载广告时会替换某种背景图片或文字。因此,如果广告加载,您会看到广告。如果广告未加载,您会看到文字。
这个例子是客户端,由JavaScript完成,或者只是简单的CSS甚至可能就足够了。
可能有一些服务器端的噱头也可以做到这一点,但它们会不必要地精心制作和笨重。一种让人想起的方法包括广告客户的某种API,可以被问到“用户从IP做过这样的事情。并且这样加载任何图像?”并以这种方式得到答案。但我怀疑有这样的服务 - 在客户端做起来要容易得多。
答案 5 :(得分:1)
我认为没有一种简单的方法可以做到这一点。你能做的就是创造“陷阱”。制作一个php脚本,听取像yourdomain.com/ad.png这样非常明显的网址。您可以通过URL重写来实现此目的。如果加载了此页面,您可以在会话变量中记下这一点并发送回1x1空白页面。
在下一个请求中,您可以查看是否已加载ad.png。如果没有,你可以猜到客户端正在使用某种形式的AdBlock软件。请确保设置相应的http标头以防止客户端缓存“ad.png”。
这是我目前唯一可以想到的服务器端方法,它有一些缺陷。
如果您决定尝试,请对此帖发表评论。
关于客户端解决方案。这应该不难。您可以创建一个小的Javascript,以便在页面加载完成时运行。此脚本可以检查该页面是否包含保存广告的dom节点。如果您在完全加载页面时(不仅是dom),您可以检查广告图像的宽度和高度。此解决方案最明显的缺点是客户端可以禁用javascripts。
答案 6 :(得分:1)
这里有一些好的答案,所以我只想补充一下:
使用一些广告管理系统(您可以自己编写)。有了它,跟踪正在显示的每个广告(并使其显而易见,如ads.php或showad.php或其他)。如果从未调用该脚本,则用户正在使用某种形式的广告拦截软件。
请务必通过该处理程序处理每个广告。 Mod_Rewrite不是必需的,可以使用简单的PHP来完成。
答案 7 :(得分:1)
我相信在客户端比在服务器端更容易做到这一点。广告拦截器安装在客户端上,因此他们可以操纵DOM并阻止ajax请求。这就是为什么我认为在客户端上检测比在服务器上检测更有意义。
无论如何,这是一个独立的简单插件,可以检测启用了广告拦截器的用户,它是开源的,完整的代码在github上:
https://github.com/retargetly/mockingbird
它更面向发布商,因此他们可以轻松地在广告容器或弹出窗口中显示消息。该插件经常更新,值得一试。这也是小提琴:
http://jsfiddle.net/retargetly/9vsha32h/
您需要使用的唯一方法是
mockingbird.adsBlocked(Obj)
可以在代码中的任何地方进行调用,并且您不需要jQuery来使其工作。
祝你好运!答案 8 :(得分:0)
您可以采取哪些措施来检测服务器端的广告拦截器,例如:
<?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>
答案 9 :(得分:0)
您可以在页面上添加javascript代码,只有在没有adblocker的情况下(例如,使用“ ad”作为变量名,使用“ ad.js”作为文件名。 此代码将ajax事件发送到服务器,并说“此用户未使用adlocker”。因此,如果您没有收到该事件,则说明该用户正在阻止广告,甚至完全禁止javascript。