V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Livid
V2EX  ›  JavaScript

是否有可能通过 JavaScript 来检测用户浏览器是否安装了 AdBlock?

  •  
  •   Livid · 2014-08-30 22:00:43 +08:00 · 11863 次点击
    这是一个创建于 3744 天前的主题,其中的信息可能已经有所发展或是发生改变。
    39 条回复    2014-09-01 12:46:50 +08:00
    paulguo
        1
    paulguo  
       2014-08-30 22:03:30 +08:00   ❤️ 1
    或许这是一种检测的方式: http://erikswan.net/abp/
    lwbjing
        2
    lwbjing  
       2014-08-30 22:04:54 +08:00
    1、可以通过BOM来检测某些插件,但不是所有浏览器都兼容;
    2、可以通过延时检测自己的广告frame是否加载出来。
    lwrless
        3
    lwrless  
       2014-08-30 22:11:38 +08:00
    可以的吧,用js检查一下有没有被加上 display:none 应该就可以判断有无屏蔽广告的插件
    adeweb
        4
    adeweb  
       2014-08-30 22:12:43 +08:00
    http://bbs.pcbeta.com/
    让我想起这个论坛,ADB激活时会显示一条banner提示“去广告虽易,做论坛不易,且行且珍惜。”

    可以延时检测广告区域的可见性和尺寸。
    xxstop
        5
    xxstop  
       2014-08-30 22:19:36 +08:00
    @adeweb +1.我也是想起这个。
    ccbikai
        6
    ccbikai  
       2014-08-30 23:12:16 +08:00
    这里有个检测方法 https://tumutanzi.com/archives/12667
    lyragosa
        7
    lyragosa  
       2014-08-30 23:17:19 +08:00   ❤️ 2
    我的做法是这样的(不用任何js,纯粹用css)

    将广告和另一个层叠加在一起(物理位置重合,z-index调整位置),广告覆盖后面那个层。

    在后面那个层用background绘制一个和广告大小等同的背景图,上面写上替代文字。

    这样就无需任何额外代码,当这个广告被屏蔽的时候,无论是dom被remove掉,或者是dom被设置成displaynone,其底下那个层都会被露出来。

    效果可以参见我的网站 http://www.linodas.com 首页,最下面的横条Adsense广告 。
    csx163
        8
    csx163  
       2014-08-30 23:37:33 +08:00   ❤️ 3
    记得某H网站你屏蔽它广告它给你强制看凤姐的恐怖的图
    loveminds
        9
    loveminds  
       2014-08-30 23:43:43 +08:00   ❤️ 2
    没必要检测,如果广告合格,去申请非侵入式广告白名单
    只有静态广告(不含动画、声音之类的内容)
    最好只有文字,没有影响注意力的图片
    广告布局方式:
    广告不应遮盖网页内容(例如要求用户点击按钮关闭广告后才能浏览网页)。
    对于以文字阅读为主的网页,为避免影响用户顺利阅读,广告不应放在文字内容中间位置, 而应放在上下方或左右两侧。 同样,显示搜索结果页面时也不应将付费搜索结果与普通的搜索结果混在一起。
    广告置于网页主区域上方时不应要求用户向下滚动鼠标。 这样可用的垂直空间距离一般至少为 700 像素,而广告占用高度不应超过其三分之一。 搜索结果页面中的付费结果则允许占用更大空间,但不应多于普通的搜索结果。
    置于两侧的广告应留出足够空间用于显示网页的主要区域。 这样可用的水平空间距离一般至少为 1000 像素,而广告占用宽度不应超过其三分之一。
    广告应使用"广告"或相同的字眼进行明确标识,并通过边框或不同的背景色与网页内容区别开来。
    上述有关标识和位置的要求不适用于网页中带有经销商推荐人 ID 的超链接。这类超链接的具体要求如下:
    由超链接重定向到目标页面的过程中不允许跳转到其他任何页面。
    加入超链接用于变现的文字不超过 2%。
    超链接的格式或行为不得异于其他链接。
    无论是内容还是位置上,超链接都不得误导他人。
    wwqgtxx
        10
    wwqgtxx  
       2014-08-30 23:59:06 +08:00 via Android
    @lyragosa 啥也没看到,来自uc浏览器
    hsu
        11
    hsu  
       2014-08-31 00:02:33 +08:00
    @lyragosa 原来你是这个站的作者?
    shajiquan
        12
    shajiquan  
       2014-08-31 00:10:13 +08:00   ❤️ 1
    imn1
        13
    imn1  
       2014-08-31 00:33:18 +08:00
    矛:anti-adblock 脚本
    盾:油猴脚本 anti-adblock killer
    BOOM
        14
    BOOM  
       2014-08-31 00:36:35 +08:00
    反正我在v2ex是未启用adb的。。
    lyragosa
        15
    lyragosa  
       2014-08-31 01:09:14 +08:00
    @wwqgtxx UC浏览器可能会中转服务器数据,导致js不执行而看不到
    手机浏览器的话用chrome或者safari没问题的。
    @hsu 是的。
    Showfom
        16
    Showfom  
       2014-08-31 01:12:27 +08:00
    当然有的

    见这里

    http://antiblock.org/
    typcn
        17
    typcn  
       2014-08-31 01:30:23 +08:00
    看一下Easylist 这个应该基本都订阅了 ,在里面随便找一个被屏蔽的元素 如.adcontent

    CreateElement 然后检测 offsetHeight

    应该是这样
    typcn
        18
    typcn  
       2014-08-31 01:32:36 +08:00
    http://blog.eqoe.cn/archives/check-adb.html 我的blog目前是用的这种的
    why
        19
    why  
       2014-08-31 01:47:45 +08:00
    || shExpMatch(url, 'https://static.v2ex.com/jobs/*')

    我这样子的
    wwqgtxx
        20
    wwqgtxx  
       2014-08-31 09:07:56 +08:00 via Android
    @lyragosa 早就关闭中转了,再说不执行js的浏览器是功能机时代的吧,智能机浏览器不执行js,第一次听说…,那我还能用uc上微博和gmail/twitter么
    wwqgtxx
        21
    wwqgtxx  
       2014-08-31 09:11:32 +08:00 via Android
    Tonni
        22
    Tonni  
       2014-08-31 09:17:34 +08:00
    Tonni
        23
    Tonni  
       2014-08-31 09:17:54 +08:00
    sobigfish
        24
    sobigfish  
       2014-08-31 10:10:55 +08:00
    可以针对abp的规则创建一个符合其匹配url规则的js,页面内假定abp为true,js重写为false
    lyragosa
        25
    lyragosa  
       2014-08-31 11:23:07 +08:00
    @wwqgtxx 可能是因为Google广告被墙了吧,最近我的用户也有人反映这个问题
    这个就没办法了……
    Smartype
        26
    Smartype  
       2014-08-31 11:50:47 +08:00 via iPhone
    昨天刚好Admob提示我禁用Adblock,或者把admob.com排除
    kookxiang
        27
    kookxiang  
       2014-08-31 12:22:10 +08:00
    一般像Google Adsense都是远程的js嘛,随便去里面取个函数来判断 typeof xxxxx == 'undefined' 就行了吧
    DreaMQ
        28
    DreaMQ  
       2014-08-31 12:42:03 +08:00
    现在Adblock Plus 出了一个 Adblock Warning Removal List
    已经在“过滤规则首选项”里面了,就差启用
    加上Anti-adblock Killer基本上都干掉了

    我觉得更好的思路应该是把所有广告都下载下来,执行里面的JS,模拟渲染来骗DOM之类,但在用户屏幕上不展示。现在的直接Blocked by Client实在太简单粗暴
    wdlth
        29
    wdlth  
       2014-08-31 13:17:09 +08:00
    以后各种Anti Anti Adblock会出现的……
    loveminds
        30
    loveminds  
       2014-08-31 15:13:33 +08:00
    @wdlth 可以告诉你们,官方在做,思路是把广告代码放置在独立而不可见的Sandbox中运行
    sincway
        31
    sincway  
       2014-08-31 15:21:02 +08:00   ❤️ 1
    流量比较小,对于不能屏蔽广告的网站直接无视... 可选替代网站太多了
    ThomasChan
        32
    ThomasChan  
       2014-08-31 16:21:35 +08:00
    wallbase.cc 这个网站上看到过可以检测到
    iugo
        33
    iugo  
       2014-08-31 18:05:01 +08:00
    @adeweb http://bbs.pcbeta.com/ 好像并未检测, 无论什么浏览器, 是否开启插件, 都有那个 banner.
    tumutanzi
        34
    tumutanzi  
       2014-08-31 21:11:23 +08:00
    虽然技术上可行,但显然网站不能靠广告来营生。
    就算都显示广告,各位以为能拿到多少广告费呢?
    cbsw
        35
    cbsw  
       2014-08-31 22:15:18 +08:00
    弱弱问一句:将网站加到白名单中不点击广告和直接屏蔽广告两者有区别吗?
    Admstor
        36
    Admstor  
       2014-08-31 23:19:25 +08:00
    实际上,只显示不点击
    和盲目的点击,都没有什么广告效果的

    最好的广告是根据用户的习惯,来提供他感兴趣的内容

    例如前几天我需要购买一个海外VPS,也搜索了一些相关的内容,加入这个时候在我比较常去的一个网站看到一个VPS广告,那么我就有很高的可能性去点击查看

    不过总体而言,靠这种广告来实现网站盈利或者说持平几乎也是不可能的事情

    网站的运营应当有更适当的盈利模式,如果你网站做的真的好,一个捐助连接会比广告更有效果...
    jedihy
        37
    jedihy  
       2014-09-01 09:18:24 +08:00 via iPhone
    adb没有必要,广告影响浏览的网站直接关闭,好网站点广告以示支持!
    Fedor
        38
    Fedor  
       2014-09-01 11:17:23 +08:00
    楼上的很多人都跑题了好吗? LZ的意思是能否监测出是否安装ADB!
    geodesy
        39
    geodesy  
       2014-09-01 12:46:50 +08:00
    防站长js检测AdBlock做出相应调整,可在chrome安装Stylish扩展程序,然后写上css

    把广告部分display:none 可死死屏蔽任何网站的任何广告 ! 效果老好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2793 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:47 · PVG 13:47 · LAX 21:47 · JFK 00:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.