如果屏蔽页面上的广告?对于普通用户来说,使用AdBlock插件是最佳选择(针对火狐浏览器和谷歌浏览器用户,不知道IE浏览器容易如何处理这样的问题)。
没有人喜欢广告,但在互联网上,绝大多数网站的主要来源只有广告,如果没有广告收入,这些网站基本上都会倒闭。
为了在投放放过和不骚扰用户之间取得平衡,很多站长是很有克制在页面上投放少量的广告。但站长们的这些良苦用心往往会被一些流氓宽带商的恶意行为给 粉碎了。几乎所有的宽带商(联通宽带、电信宽带、移动宽带、长城宽带、方正宽带等)都会在用户使用它们的宽带服务浏览网页时,在这些网页的页面上强行嵌入 自己的广告服务。
以大家熟知的36kr网站为例子来说明这个问题。我使用的是方正宽带,当用户访问36kr网站的页面时,正常情况下,36kr网站的页面是没有放置广告的,更不会在页面的右下角弹出广告。但当使用方正宽带访问36kr网站时,你就会发现页面右下角有广告弹出。
我们使用火狐浏览器的代码调试窗口,发现,在页面的尾部无端多出来很多
iframe
和嵌入有广告代码的
div
。很显然,这些代码并不是36kr放置的。它是宽带商捕捉用户浏览的网页,擅自非法的这些页面上添加自己的广告服务代码。这些代码能给宽带商带来一笔额外的收入。
对于站长来说,这些广告很讨厌,用户会认为这些都是网站站长投放的。站长背了黑锅,而且没得到任何好处,更重要的,影响了在用户心中的形象,流失了用户。
站长应该维权,但站长是弱势群体,维权路上很难成功。那么,我们只能自己想办法,我们可以通过技术的手段,在页面代码里做一些改动,阻拦或屏蔽这些宽带商非法嵌入的代码。
我发现,宽带商非法嵌入的广告代码通常是两种形式,一种是在页面尾部加入数个
iframe
,
iframe
里的内容是宽带商承揽的广告;另外一种形式是直接嵌入
div
,
div
里嵌入一些html代码和js,最终呈现的内容还是宽带商承揽的广告。
但无论是
iframe
还是
div
,这些HTML广告代码都有相同的特征。
首先说说
iframe
形式,这些
iframe
在页面文档中的位置一定都是
body
元素的直接子元素,用CSS 选择器可以这样表示:
body > iframe{....}
以我个人的经验,一般正常的页面里很少有使用
iframe
的,即使有,也很少有将
iframe
直接放到
body
元素下的。所以,对于这些流氓宽带商非法嵌入的
iframe
,我们可以通过下面的CSS进行屏蔽:
body > iframe{ opacity:0; display:none; }
把这段代码放入页面里,这非法嵌入的广告
iframe
,虽然存在,但完全看不见。
对于第二种情况,也就是
div
形式的广告,我发现这些
div
通常会放置在页面的最后,也就是页面里正常HTML元素的最后一个的后面。如果我们的页面里最后一个元素是:
<div id='last-div'></div>
,则就要其后非法插入的广告代码的CSS选择可以是这样:
div#last-div ~ div {。。。。}
,只要能捕捉目标,我们就能消灭它们,隐藏这些非法入侵者的代码很简单,跟上面消灭
iframe
的方式一样:
div#last-div ~ div { display: none; opacity:0; }
将上面这这种代码一起放到页面里的CSS文件里,黑心的宽带商非法插入的广告就无法显示,我只是小范围的测试了一下,效果很好,但很有可能还有更多没有考虑到的情况。如果你知道这种方法有遗漏的地方,或者有更好的方法,请告诉我,在下面留言,或发邮件给我,谢谢。