我最近访问 一个网站 并注意到,该网页有一个部分,说它注意到,我是使用广告拦截软件,并可能我请把它关掉,以帮助支持一个小网站像这样.我只是想知道你会怎么做?会是最好的客户端或服务器?

有帮助吗?

解决方案

这是一件根本不可能完成服务器端 - 有小人物的理由的人敲你的门,说:“你看我,我有AdblockPlus!”。当在客户端,Adblock的积极试图影响页面内容,这是你可以看到发生,看到他们使用的是adblocker。

不管怎样,我碰巧知道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;

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

其他提示

全部关闭这里提到的方法依赖于广告拦截,以汽提出的代码。这并不适用于某些广告拦截器(如NetBarrier在Mac)的工作。你还必须不断更新你的代码时,广告拦截器流行开来。

要检测如果用户拦截广告,所有你需要做的就是找到在广告中的JavaScript功能,并尝试测试它。不要紧,他们正在使用屏蔽的广告是什么方法。下面是它看起来像谷歌的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页面,为acording广告(可能与一些独特的标识符每个请求...)请求做它在服务器端...但是,这只是一个想法,我从来没有尝试过和甚至从未见过使用。

我发现这部分的代码,这似乎看起来就像他们是如何做到的:

/*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 such.and.such负荷没有用户的任何图像?”并以这种方式得到的答案。但我怀疑有这样的服务 - 这将是更容易在客户端做

我相信比服务器端更容易做到这一点的客户端。广告拦截器安装在客户端上,这样他们就可以操作DOM和块Ajax请求。这就是为什么我认为它更有意义,在客户端上检测到比在服务器上。

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

https://github.com/retargetly/mockingbird

这是更多的面向,使他们可以轻松地显示在广告容器或在弹出消息发布者。这个插件是经常更新的,这是值得一试。这是小提琴也:

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

需要使用的唯一方法是

mockingbird.adsBlocked(Obj)

在调用可以在代码的任何地方做,你并不需要jQuery来使其工作。

祝你好运!

我不认为这是一个简单的方法来做到这一点。你可以做的是创建"陷阱"。做一个php script听到一个非常明显的网址像yourdomain.com/ad.png.你也许可以实现这url重写。如果这一网页载你可以注意到这一会议的可变和送回的一个空白1×1png。

在接下来请求你可以看看是否广告。png已经加载。如果没有你可以猜测,客户是使用某种形式的扩展软件。确保设定适当http头,以防止客户从高速缓存"的广告。png".

这是唯一的服务器侧的方法我想在那一刻,它有一些缺陷。

  • 巴布亚新几内亚的文件可以缓存,无论该http头
  • 这将不作为的第一个http请求
  • 一些额外的服务器的负载如浏览器将继续打的广告。png每个请求
  • 就像得到加载服务器是没有保证,它实际上正在显示
  • 可能更多的副作用,我没有想到的

请作出评论,对这个职位如果你决定要试试看。

关于客户端的解决方案。这不应该是到困难。你可以创建一个微小的Javascript运行页上载完成。这个脚本可以查看,该网页包含dom-节点保持的广告。如果你这个网页时加载完全(不仅dom)你可以检查的宽度和高度,你的广告的图像。最明显的缺点有这种解决方案的客户可以禁止javascript.

在这里有几个很好的答案,所以我就补充一点:

使用一些广告管理系统(你可以写你自己的)。就这样,跟踪真实显示每个广告(并使其明显,像ads.php或showad.php或其他)。如果脚本不会被调用,所述用户使用的广告拦截软件的某种形式。

请务必通过处理程序来处理每一个广告,虽然。 mod_rewrite的不是必需的,它可以使用简单的PHP来完成。

你能做些什么来检测服务器端的adblocker被somithing这样的:

<?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