最近上线一个新版本,需要在导航增加一个app的下载入口(一个图片链接),然后经过了正常的原型图、设计、切图、上线的过程,一切都是那么顺利。上线之后,像往常一下会让产品进行确认,所有的调整和优化都没有问题,可以正常的展示,但是发现一个奇怪的现象,在chrome下app的入口始终看不到。然后我就在我的机器上几乎看了所有的浏览器(chrome、firefox、safari、IE系列、opera),都能看到。于是我理所当然的做了以下几步:
  • 让产品清除缓存看一看,之前有过这种情况,由于样式资源存在缓存导致没有正常显示,结果,没有显示
  • 怀疑是不是那台机器没有上啊(我很不想出现这个,这会导致上线脚本等一系列问题),去看了产品的机器,发现其他调整了的都能正常运行,应该可以排除这个问题了
    
    紧接着我就想到了是不是浏览器的插件有影响呢?是的,在看插件的时候,我看到了它,这个让我醉生梦死的她。禁用之后,发现可以正常显示了。进一步跟了一下,到底触发了一个什么样的规则,导致我一个正常的功能入口,被当做广告给拦截了。看了一下源码发现,我使用了一个nav-ad的类名,就是这个触发了adblock的规则。当然知道了什么原因导致的问题,很快就可以正常的解决这个问题。
 
    但是事情还没有完,这只是一个点,我想了一下,如果不把这个规则搞清楚的话,以后还会触发其他我们现在未知的的一些规则,导致在用户那里不能正常展示。于是我学习了一下,adblock的撰写规则,这里跟大家一块儿学习一下。
  • 基本过滤规则
            要拦截的url地址,如:http://example.com
  • 定义例外规则
            可以使用@@表示后面的是例外,不会拦截;也可以配合|使用。如:@@|http://example.com
  • 匹配网址开头和结尾
            使用管线符号|表示最前端或者最末端。如:阻挡以swf结尾,swf|;阻挡以http开头的,|http。
  • 标记分隔符
            通常需要接受过规则的任何分隔符,分隔符可以除了字母、数字或_-.%之外的任意字符。
  • 注释
            使用!作为注释的开始,也可以在注释的上面书写任何想些的文案。
  • 制定过滤规则选项
        
  • 使用正则表达式
            通过正则表达式书写过滤规则,但是出于性能考虑,不建议使用。
  • 元素隐藏
            之前讲到的规则,只要匹配上请求都无法发送。有一些拦截必须要发送请求之后才能知道是否真的需要拦截,才是可以使用到元素隐藏的规则。发现请求的数据触发了拦截的规则,此时会隐藏相应的元素。一般使用选择器进行匹配,如:http://example.com###coner-flash http://example.com##.floatgg等等            
 
    学习了撰写规则,然后在大概了解一下easylist(https://easylist-downloads.adblockplus.org/easylistchina.txt)等规则,大概知道什么情况下会触发这些规则。进而,在开发过程中,可以避免掉入这些坑里面。
 
    总结一下:通过上面的学习可以再根据easylist查看一些经常会被拦截的id、class命名,然后避免使用包含ad的类名、class名、文件名;避免使用被拦截域名下的资源;很多公司的打点统计会被拦截,这个可以通过bd联系一下,看看是否可以解决。如果打点统计被拦截之后,量足够大的话,是会直接影响数据的准确性的,所以这块儿需要重视一下。
 
 
参考资料:
https://adblockplus.org/zh_CN/filters#basic 撰写adblock Plus过滤规则
http://bbs.kafan.cn/thread-1674209-1-1.html adblock plus官方规则说明反馈贴
 
 

你被adblock坑过吗?的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  2. 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例

    前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...

  3. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  4. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  5. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

  6. 为C# as 类型转换及Assembly.LoadFrom埋坑!

    背景: 不久前,我发布了一个调试工具:发布:.NET开发人员必备的可视化调试工具(你值的拥有) 效果是这样的: 之后,有小部分用户反映,工具用不了(没反应或有异常)~~~ 然后,建议小部分用户换个电脑 ...

  7. 首个threejs项目-前端填坑指南

    第一次使用threejs到实际项目中,开始的时候心情有点小激动,毕竟是第一次嘛,然而做着做着就感受到这玩意水好深,满满的都是坑,填都填不过来.经过老板20天惨无人道的摧残,终于小有成就. 因为第一次搞 ...

  8. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑

    自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...

  9. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

随机推荐

  1. [教程]隐藏ActionBar中的MenuItem

    有时候我们需要在不同的时候改变ActionBar中MenuItem的项数,或者隐藏某些MenuItem,百度上找了很久没什好资料,还是Google了一下,StackOverFlow上有大神解决了. 先 ...

  2. hdu2817之整数快速幂

    A sequence of numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. PHP常用魔术方法(__invoke魔术方法)

    <?php //文件名:index.php define('a',__DIR__); include '/IMooc/Loader.php'; spl_autoload_register('\\ ...

  4. css中的段落样式及背景

    一.段落样式 css中关于段落的样式主要有行高,缩进,段落对齐,文字间距,文字溢出,段落换行等.它们的具体语法如下: line-height : normal | length text-indent ...

  5. Ubuntu下访问SSH

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  6. Enabling Active Directory Authentication for VMWare Server running on Linux《转载》

    Enabling Active Directory Authentication for VMWare Server running on Linux Version 0.2 - Adam Breid ...

  7. NSString属性什么时候用copy,什么时候用strong?【转】

    转自:http://www.cocoachina.com/ios/20150512/11805.html. 我们在声明一个NSString属性时,对于其内存相关特性,通常有两种选择(基于ARC环境): ...

  8. Docker的简单认知

    Docker images: docker image是一个只读打模板,用来创建Docker 容器 Docker Registers 互联网上存储images的地方 Docker containers ...

  9. Sql Server 查看所有存储过程或视图的位置及内容

    and a.object_id = b.object_id and a.[type] in ('P','V','AF') order by a.[name] asc 通过这个sql语句可以查到sql ...

  10. java文件读写的两种方式

    今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码: public static void main(String[] args) throws IOExceptio ...