广告屏蔽:国内各电商 Web App 页面的 Native App 下载提示屏蔽
浏览国内各电商的 Web App 页面,总是会有下载它们 App 的提示,本来手机屏幕就小,加上该提示不易关闭,有些还会遮挡住页面部分内容。总之,体验不是很好!接下来就谈谈各电商的广告原理以及屏蔽方法。
首先从简单的下手好了,苏宁
苏宁的广告只出现在首页顶部,通过 Chrome 从首页的 HTML 文档中就能看到苏宁的处理,简单粗暴。
|
|
自然屏蔽也非常简单了:
|
|
以上是第一种广告处理的方式。
国美也简单,但处理上好过苏宁的。国美的广告只出现在首页顶部,也不会固定在页面的某块区域。
首先,通过 Chrome 查看首页结构,定位到这里:
|
|
到这里已经拿到广告位元素的 ID 了,通过 DOM 编程就能将其隐藏或 remove 掉。但是这样有一点不好,由于只能等待其页面加载完成,才能植入 JS 代码。所以,每一次进入首页,都会先显示广告元素。为了寻求更好的解决方案,继续查看其 JS 代码。
|
|
从以上代码可以看出,当存在以 ID 为 float_id 的 value 为 key 的 Cookie 时,广告位元素会被隐藏(也就不需要植入 JS 手动操作了)。继续看国美是怎么判断并 setCookie 的
|
|
所以,当点击广告元素上的关闭按钮时,会被写入 Cookie。这时,只需要设置 Cookie,模拟关闭广告操作即可。
代码如下:
|
|
只要设置的 Cookie 有效期长,且 WebView 的数据不被清理掉,广告元素就这样被屏蔽掉。
国美的提示比较简单,也没那么烦人。易迅同样是首页显示大广告,几乎占了手机屏幕的 2/3,不过其广告 24 小时内只显示一次(第一次显示之后就会写入 Cookie,有效期 24 小时)。原理就和国美一样,通过写 Cookie,找到易迅是如何写 Cookie的,再将其 Cookie 有效期延长,易迅的广告也就屏蔽了。
易迅广告相关代码:
|
|
|
|
屏蔽代码如下:
|
|
天猫、当当同样可通过设置 Cookie 屏蔽
天猫:
|
|
当当:
|
|
以上是第二种广告处理的方式。
一号店的广告只存在于首页,比较大。而一号店广告相关的代码如下:
|
|
一号店通过 window.localStorage 记录每次显示广告的时间,key 为 apolloDonwloadFlag,然后将记录时间与当时时间进行比较,如若在 24 小时内,则不会再显示。所以屏蔽的方法就是每次修改 apolloDonwloadFlag 的值为当时时间就好。
屏蔽代码:
|
|
京东首页也和一号店一样,处理方式也相同。
屏蔽代码:
|
|
最后就剩淘宝了。首先通过 Chrome 定位淘宝广告条元素位置,代码如下:
|
|
发现,淘宝广告元素的 ID 和 Class 全都是随机数,-_-这样也就无法通过 DOM 隐藏或 remove 掉了(算你狠)。没办法,接着看 JS 代码,整个都是 JS 实现的。
前面几个都可以依据 Element ID or ClassName 快速找到 JS 代码的相关位置,淘宝虽然使用了随机数,但后缀还是不变的,搜索“-close”,也能定位相关代码位置了(,也可以根据广告条上文字定位)。
然后就会发现淘宝也是使用 localStorage 记录广告条关闭时间。Key 为 closeDate。
相关代码在 g.tbcdn.cn/mtb/ 域下 zepto.js 文件中
总之,分成三种不同的处理方式:
简单粗暴,直接在页面顶部或底部放置广告元素。没有任何用户体验的优化。如苏宁。可根据 Element ID 或 ClassName 隐藏或 remove 掉。
使用 Cookie 来标记广告已显示,或被用户关闭。通过设置 Cookie 的有效期来控制时间。找到广告相关的 Cookie Key,设置超长的有效期即可屏蔽。
使用 localStorage 来储存广告显示时间,或被用户关闭时间。通过与当前时间的对比来控制广告是否被显示。同样找到相关的 Key,设置为当前时间,即可屏蔽。