两句代码去somee广告 ----谈怎样去除免费空间的广告
首先声明,somee是一个好空间,30M,支持asp,asp.net,access,fso....偶以前也是somee的用户。只是因somee不能绑定偶的域名,所以才放弃了这个好地方。
言归正传,我们先分析一下somee的插入广告形式。
两句代码去somee广告 ——谈怎样去除免费空间的广告
驿博网志 http://blog.transbaker.net 作者:zzn
偶最开始使用somee的时候,广告是插入在<body>标签的后面的。
假如你有如下一段html代码生成,那么代码将插入在提示位置。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
要去除这种形势的代码,可以用两个方法。
1、既然Web服务器识别body标签的末标签。那么,利用浏览器的纠错功能,我们插入一个伪body标签在一个隐藏的层当中。将上述的HTML改为
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
这样,广告代码会插入在第一个<body>后面。而浏览器自动把第一个<body>以后后面的广告代码当作是Layer1里面的内容。于是就不会显示出来了。
好处:使用Layer控制,下载的时候直接执行静态HTML,通过预设的css直接屏蔽,视觉上不会出现任何“污染”。
2、这个方法也就是比较常见的方法,也是比较灵活的方法。
通常不管是什么插入广告,都会有广告的特征码。因为HTML的标签大多是成对出现的,外层的标签对内层的标签有限制作用。所以,我们通过特征码找到插入代码的最外层标签,然后使用css把它设置为不可见即可屏蔽掉该广告。今天写这篇文章的时候,somee的广告插入方式已经作了变化,我会在后面补充说明。
通过打开一个被加入了广告的的页面,我们很容易找到广告代码的位置,而且通常这段广告都会有注释性的标记。当然注释性的标记不是我们的重点,不影响浏览的一切东西我们都不在乎。:)
找到代码最外层标签的方法,具体有下面几种:
a、有id或者name的。这种最方便,使用document.all.id或者document.all.name就可以找到了。
如广告代码如下:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
或
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
则使用
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
就可以解决问题了。
这里面有一种非常罕见的情况,假如你的本身的网页生成的html中就有这个id或name的标签。你就需要再麻烦一下,分析一下id和name的位置。按照html从上到下的看,id或者name相同的标签,index依次是从0开始的。把下面代码中[0]修改为广告代码中对应标签的位置就行了
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
另外一种方法就是使用GetElementsById[id],GetElementsByName[name]。比如上示的代码可以写为:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
b、没有id或者name。这种比较罕见。不过也不是没有办法。你最好先下载一个被插入了广告的页面,修改一下html文件,在广告代码的最外层标签添加一个唯一的标记便于寻找,如添加id="HUR"。然后使用如下代码找到这个标签的位置。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
在IE下运行之后,通过alert()出来的那个对话框,记住索引号。再回头修改上面的代码为最后的去除广告代码。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
经过以上的这些步骤,大部分插入性的广告你都可以应付了,那么 somee 的广告问题应该也就迎刃而解了。但是....
html是顺序执行的,即代码从上到下被下载执行。目前的somee将广告插入到文档最末。我使用了伪标签,发现它不是识别</html>为文档最末的!即当发生请求时,somee服务器文档读入到内存,在发布的时候自动在该段内存最末添加上它的广告代码!HTML是从上往下执行的,预先执行的命令对后出现标签无效。但是,最末的文档是服务器加入的,我们不能再该段文档中插入触发器,怎么办呢?
我们先把最后的去除广告的代码放在一个单独的js文件中。这样,如果空间商变化广告插入模式,我们也不用全站点的文档都作修改,只需要修改这个包含有效代码的文档就行了。
目前的somee的广告代码如下,插入在文档最末。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/dot.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
问题回到本文的题目了。
我们存储一下代码为文件 clearAd.js:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
我们在页面文件的head中插入如下代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
这个defer很重要,它表示将在代码下载完毕后再执行。这样,刚才的问题也就真正解决了。
OK,很容易吧?站长们,还等什么,去除掉你们不喜欢的广告吧!
注:效果展示:偶的somee空间http://transbaker.somee.com的首页已经添加了去除广告代码。