`
天梯梦
  • 浏览: 13756749 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

网页检测 AdBlock 的 6 种方法

 
阅读更多

 

DEMO: http://sources.ikeepstudying.com/anti-adblock-killer/

 

有些网页上充斥着令人厌恶的广告,这些广告不仅阻碍了信息的获取,有的还严重影响了浏览者的心情。特别是某些毫不相关的多媒体广告和弹出式窗口,不仅让人感到被骚扰,还很容易误点到,浪费宝贵的时间。由此便诞生了大名鼎鼎的跨平台 AdBlock 插件,在任何主流浏览器上都有它的扩展或插件,用户可以安装它并屏蔽绝大多数的广告。

既然 AdBlock 有检测广告并屏蔽它们的方法,作为网页制作者,其实也有反过来检测 AdBlock 的方法。

 

为什么要检测 AdBlock

这是一个有争论的问题:用户有选择不看广告、在浏览器页面上销毁广告的权利,网站也有捆绑广告和信息一同派发给你并收取广告商展示费用的自由。这两者都不能互相干预,并且在没有明确法律法规的环境下,你可以防范我,我也可以防范你。

ads-on-webpage

除了向 AdBlock 直接提交 “可接受的广告网站” 申请进入白名单以要求直接免受屏蔽之外,下面介绍 6 种从网站本身出发的检测 AdBlock 并触发相关操作的方法。

以下的方法都是以不修改广告代码本身的基础上完成的,因为诸如 Google AdSense 的广告联盟要求不得修改代码。

 

检测广告模块可见高度

这是一种很朴实的方法,原理也很简单,就是检测对应广告模块的高度是否小于它应有的高度,若小于就说明它被置空塌陷了,也即说明启用了 AdBlock。

代码类似如下

if( document.getElementById('ads').clientHeight < 90 ){

//AdBlock Detected

}

 

此方案的可行性为中。某些情况下 AdBlock 屏蔽了某个广告之后的处理情形比较特殊,不会使得广告模块塌陷,而是维持设定的高度显示空白,那个时候就不管用了。

 

检测可见广告的个数

这是一个和上述类似的方法,也很朴实,那就是检测当前页面上的广告个数是否达到预期,因为某些广告可能并没有触发 AdBlock 的规则得以显示,所以可以利用检查广告的个数的方法来达到目的。

借助 jQuery,代码类似如下

if( $('.ads').filter(':visible').length < 3 ){

// Ads showing less than 3

// AdBlock Detected

}

 

此方案的可行性仍然为中,理由和上一个方法类似。

 

检测 google_jobrunner

这个方法仅仅适用于 Google AdSense 广告。在加载了 AdSense 的广告代码之后,有一个 window.google_jobrunner 对象被建立,而 AdBlock 会阻止 AdSense 代码的加载,此时这个对象将不存在。我们可以靠这一点来检测 AdBlock。

其代码看起来类似于

if ( typeof(window.google_jobrunner) != 'object' ){

// AdSense js not loaded

// AdBlock detected

}

 

检测 adsbygoogle 类型是否是数组

这个方法仅仅适用于 Google AdSense 广告。如果你使用了含有 ins 标签的新异步代码,则可以使用这个方法。其原理是,adsbygoogle 在当前页面加载时被初始化为一个数组,而当 AdSense 的代码被加载时,它被进化为一个对象 object,而 AdBlock 会阻止 AdSense 代码的加载。因此,我们通过检查 adsbygoogle 的状态就可以知道 AdBlock 有没有安装。

其代码应该类似于

window.setTimeout(function(){

if(adsbygoogle instanceof Array) {

// AdSense js not loaded

// AdBlock detected

} }, 2000);

 

此方案的可行性为高,因为这充分利用了 AdSense 的特点,并且非常准确,效率也很高。代码中的 setTimeout 是为了弥补 AdSense 代码运行所花费的时间,大约两秒够了。

 

使用 Ajax 模拟一个广告代码加载请求

我们知道 AdBlock 会阻止广告代码的加载,因此,我们可以通过尝试模拟加载一个广告代码 ads.js ,如果AdBlock 屏蔽了这次行为,可以触发其失败的方法,达到检测的目的。

借助 jQuery,我们可以这样写

$.ajax({

url: "ads.js",

dataType: "script"

}).fail(function () {

// Ads.js not loaded

// AdBlock detected

});

 

此方案的可行性很高,因为这戳中了 Adblock 的弱点。其中 ads.js 本身可以是一个空文件,但它不能不存在,否则会发生 404 错误,导致误判。所以你需要在这个目录下放一个 ads.js 文件。你甚至可以把它叫做 adsbygoogle.js 文件。

如图所示,加载 ads.js 时,行为被 AdBlock 阻止:

ads.js-blocked-500x200

 

加载额外的 ads.js 帮助判断

我们知道 AdBlock 会屏蔽页面中类似名称为 adsbygoogle.js、ads.js 的脚本文件,所以我们可以利用这个特点来引入一个自己的 ads.js 来帮助判断。如何实现呢?

首先创建一个 ads.js 文件,这个文件里只有一句话:

var isAdEnabled = !!1;

 

然后,我们在网页页面上试图引入这个脚本文件:

<script src="ads.js" type="text/javascript"></script>

 

如果存在 AdBlock,ads.js 会被屏蔽加载,因此 isAdEnabled 这个变量就不会被建立。

于是,我们这样来检测:

var isAdEnabled = isAdEnabled || !1;

if( !isAdEnabled ){

//Ads.js not loaded

// AdBlock detected

}

 

这样,如果 ads.js 被屏蔽了,isAdEnabled 就会被初始化为 false。这个方案的可能性也很高。

 

写在最后

不仅仅有上述的检测代码,还有人甚至做好了 js 插件、wordpress 插件可以直接现成的用,它们功能丰富并且可以自定义设置。你可以根据自己的情况选择钟意的方案。但在此应当注意的是,广告并不总是坏的,相反,网络上存在着很多有价值的广告。如果自己的网站因为广告的问题被用户反感,那么广告提供商和网站管理员都应该想想怎么着手去改善这一切,而不应该激怒用户而让他们用上 AdBlock,最后双方都有损失。

 

DEMO: http://sources.ikeepstudying.com/anti-adblock-killer/

 

原文:http://blog.netsh.org/posts/adblock-detect_2017.netsh.html

 

justcode.ikeepstuding.com

分享到:
评论

相关推荐

    Adblock-Plus_v1.8.12及使用方法

    **Adblock Plus的使用方法** 安装完成后,Adblock Plus会在浏览器的右上角显示一个小图标,通常是一个红色的A,上面有一个减号。这个图标表示Adblock Plus正在运行并拦截广告。 - **启用和禁用Adblock Plus**: ...

    adblock.zip

    6. **adblock.js**: 这是整个广告拦截器的核心文件,很可能包含了实际的广告检测和过滤算法。它可能利用jQuery和doT.js来处理DOM和渲染,通过custom_event.js来响应浏览器事件,而chrome_webui_apis.js则帮助它与...

    Adblock Plus for Chrome

    当用户访问含有广告的网页时,插件会自动检测并屏蔽掉符合规则的广告内容。 **主要功能:** 1. **广告拦截**:自动屏蔽各种形式的广告,包括图片、文字、弹窗、横幅和视频广告。 2. **自定义过滤**:用户可以添加...

    Adblock Plus浏览器插件

    因此,有些网站可能会检测到Adblock Plus的存在并阻止其用户访问,或者请求用户禁用广告拦截器。 总之,Adblock Plus作为一款强大的广告拦截工具,为用户提供了干净的浏览环境,同时也引发了关于网络广告和网站生存...

    Adblock:Adblock适用于多个域

    因此,一些网站可能会采取措施来检测并阻止Adblock的使用。 10. **替代方案与竞争** 虽然Adblock是最知名的广告拦截工具之一,但市场上还有其他类似软件,如Adblock Plus、uBlock Origin等。这些工具同样提供广告...

    Adblock Plus Chrome.zip

    Adblock Plus通过实时更新的恶意软件数据库,能够在广告加载前进行检测,有效防止恶意软件对用户的设备造成危害。 **白名单与接受不干扰广告** 尽管Adblock Plus的目的是为用户提供一个无广告的网络环境,但它也...

    AdBlock.zip

    AdBlock,作为一个知名的浏览器扩展程序,它的主要功能是帮助用户在浏览网页时有效地屏蔽各种形式的广告,包括横幅广告、弹窗广告以及视频广告等,从而提供一个更为清爽和无干扰的网络浏览环境。AdBlock的出现,源于...

    Adblock+Plus

    Adblock Plus的过滤规则分为两种类型:基本过滤规则和自定义过滤规则。基本过滤规则由ABP维护,通常会阻止大部分常见的广告。自定义过滤规则允许用户根据自己的需求添加或删除特定的广告源。此外,Adblock Plus还...

    adblock

    同时,为了防止网站通过检测AdBlock的存在来强迫用户关闭插件,AdBlock还会采取反反广告拦截的技术。 总的来说,AdBlock是一款深受用户喜爱的工具,它通过强大的过滤规则和智能化的拦截机制,提供了干净、快速的...

    AdBlock Detector Bypass-crx插件

    2. **网站兼容性**:并非所有网站都能被此插件有效处理,某些网站可能采用更复杂的方法来检测AdBlock,导致插件无法完全屏蔽弹窗。 3. **广告拦截器冲突**:AdBlock Detector Bypass与其它广告拦截器同时使用时,...

    前端项目-adblock-detect.zip

    该项目的核心在于检测技术,通常包括以下几种方法: 1. **JavaScript API检查**:广告拦截器可能会禁用某些广告相关的JavaScript库或API。通过尝试加载这些库或执行特定的API函数,如果返回异常或失败,就可能意味...

    anti-adblock-filter:反Adblock过滤器

    这是一种技术策略,旨在检测并阻止Adblock工具的运行,从而允许广告在用户的浏览器中正常显示。 首先,我们需要理解Adblock的工作原理。Adblock是一种浏览器扩展,它通过使用过滤规则来识别并拦截网页上的广告元素...

    后端开发者常用的谷歌插件:Adblock-Plus、JSONView、advanced rest client

    它可以帮助开发者在浏览网页时避免广告的干扰,从而提高专注度和工作效率。Adblock-Plus通过过滤规则来阻止各种类型的广告,包括横幅广告、弹窗广告、视频广告等,让开发者可以在纯净的环境中进行代码阅读、研究文档...

    adblock-mirror:这是来自https的AdBlock SVN存储库的未修改镜像

    在AdBlock中,JavaScript主要负责检测网页内容,识别并阻止广告元素的加载。它通过匹配特定的规则(例如CSS选择器或正则表达式)来识别广告,并利用浏览器API移除或隐藏这些元素。此外,JavaScript还用于处理用户...

    Adblock:22020年学期用于软件开发学科的adblocker

    Adblock是一种广泛使用的浏览器扩展,其主要功能是阻止网页上的广告,提高浏览体验,减少不必要的数据加载,同时保护用户隐私。在这个专题中,学生将深入学习JavaScript编程语言,因为Adblock的核心实现就离不开它。...

    No Adblock-Killer-crx插件

    当用户安装了"No Adblock-Killer"后,他们无需手动禁用广告拦截器就能正常浏览那些可能检测并阻止Adblock的网站。"再次享受无广告的网站"强调了该插件的主要功能,即确保用户在浏览过程中不会受到广告的打扰。 ...

    去插件广告

    总的来说,Adblock类插件如Adblock Plus为用户提供了一种控制自己在线体验的方式,减少了广告的干扰。然而,它们也引发了关于用户体验、网站盈利和网络安全的复杂讨论。用户在享受广告拦截带来的便利时,也需要理解...

    I know I use Adblock-crx插件

    6. **安装与卸载**:用户可以通过浏览器的扩展商店下载并安装Adblock-crx,安装过程简单快捷。若不希望继续使用,也可以在浏览器的扩展管理界面中轻松卸载。 7. **自定义设置**:除了默认的过滤规则,Adblock-crx还...

    谷歌防广告插件

    【谷歌防广告插件】是一种专门用于谷歌浏览器(Chrome)的扩展程序,其主要功能是帮助用户屏蔽网页上的各种广告,提升浏览体验。这款插件名为AdBlock,版本为3.31.2,可以通过直接在浏览器的扩展程序管理界面进行...

    前端项目-fuckadblock.zip

    在前端开发领域,广告拦截器(AdBlock)的普及对网站的收入模式产生了重大影响,因为许多用户使用这类工具阻止网页上的广告展示。为应对这一挑战,开发者们创建了名为"FuckAdBlock"的解决方案。这个名为"前端项目-...

Global site tag (gtag.js) - Google Analytics