两句代码去somee广告 ----谈怎样去除免费空间的广告

 

首先声明,somee是一个好空间,30M,支持asp,asp.net,access,fso....偶以前也是somee的用户。只是因somee不能绑定偶的域名,所以才放弃了这个好地方。


言归正传,我们先分析一下somee的插入广告形式。

两句代码去somee广告  ——谈怎样去除免费空间的广告
驿博网志  http://blog.transbaker.net  作者:zzn

偶最开始使用somee的时候,广告是插入在<body>标签的后面的。
假如你有如下一段html代码生成,那么代码将插入在提示位置。

 

<head>
</head>
<body><!--此处将被插入广告代码-->
  
<table>
    
<tr>
      
<td>this is a test</td>
    
</tr>
  
</table>
</body>



要去除这种形势的代码,可以用两个方法。
1、既然Web服务器识别body标签的末标签。那么,利用浏览器的纠错功能,我们插入一个伪body标签在一个隐藏的层当中。将上述的HTML改为

 

<head>
</head>
<div id="Layer1" style="position:absolute; width:0px; height:0px; z-index:1;dislay:none"><body></div>
<body>
  
<table>
    
<tr>
      
<td>this is a test</td>
    
</tr>
  
</table>
</body>

 

这样,广告代码会插入在第一个<body>后面。而浏览器自动把第一个<body>以后后面的广告代码当作是Layer1里面的内容。于是就不会显示出来了。

好处:使用Layer控制,下载的时候直接执行静态HTML,通过预设的css直接屏蔽,视觉上不会出现任何“污染”。

2、这个方法也就是比较常见的方法,也是比较灵活的方法。
通常不管是什么插入广告,都会有广告的特征码。因为HTML的标签大多是成对出现的,外层的标签对内层的标签有限制作用。所以,我们通过特征码找到插入代码的最外层标签,然后使用css把它设置为不可见即可屏蔽掉该广告。今天写这篇文章的时候,somee的广告插入方式已经作了变化,我会在后面补充说明。

通过打开一个被加入了广告的的页面,我们很容易找到广告代码的位置,而且通常这段广告都会有注释性的标记。当然注释性的标记不是我们的重点,不影响浏览的一切东西我们都不在乎。:)

找到代码最外层标签的方法,具体有下面几种:
a、有id或者name的。这种最方便,使用document.all.id或者document.all.name就可以找到了。
如广告代码如下:

<div id="adlayer" >
  some Advertisement code 
</div>



<div name="adlayer" >
  some Advertisement code 
</div>

 

则使用

<script>document.all.adlayer.style.display = 'none' </script>


就可以解决问题了。

这里面有一种非常罕见的情况,假如你的本身的网页生成的html中就有这个id或name的标签。你就需要再麻烦一下,分析一下id和name的位置。按照html从上到下的看,id或者name相同的标签,index依次是从0开始的。把下面代码中[0]修改为广告代码中对应标签的位置就行了

<script>document.all.adlayer[0].style.display = 'none' </script>

 

另外一种方法就是使用GetElementsById[id],GetElementsByName[name]。比如上示的代码可以写为:

<script>document.GetElementsById['adlayer'][0].style.display = 'none'</script>

 

b、没有id或者name。这种比较罕见。不过也不是没有办法。你最好先下载一个被插入了广告的页面,修改一下html文件,在广告代码的最外层标签添加一个唯一的标记便于寻找,如添加id="HUR"。然后使用如下代码找到这个标签的位置。

 

<script>
var divs = document.getElementsByTagName('div'); //假设广告代码是嵌套在"<div>"标签中。
for (var divindex=0;divindex++;divindex<divs.length)
{
 
var tdiv = divs[divindex];
 
if (tdiv.id == 'HUR') //找到标签
 {
  alert(divindex); 
//输出标签索引号
  break;
 }
}
</script>

 

在IE下运行之后,通过alert()出来的那个对话框,记住索引号。再回头修改上面的代码为最后的去除广告代码。

 

<script>
var divs = document.getElementsByTagName('div'); //假设广告代码是嵌套在"<div>"标签中。
divs(divindex).style.display = 'none';  //divindex为刚才得到的索引号。
</script>

 

经过以上的这些步骤,大部分插入性的广告你都可以应付了,那么 somee 的广告问题应该也就迎刃而解了。但是....

html是顺序执行的,即代码从上到下被下载执行。目前的somee将广告插入到文档最末。我使用了伪标签,发现它不是识别</html>为文档最末的!即当发生请求时,somee服务器文档读入到内存,在发布的时候自动在该段内存最末添加上它的广告代码!HTML是从上往下执行的,预先执行的命令对后出现标签无效。但是,最末的文档是服务器加入的,我们不能再该段文档中插入触发器,怎么办呢?

我们先把最后的去除广告的代码放在一个单独的js文件中。这样,如果空间商变化广告插入模式,我们也不用全站点的文档都作修改,只需要修改这个包含有效代码的文档就行了。

目前的somee的广告代码如下,插入在文档最末。

<!--SCRIPT GENERATED BY SERVER! PLEASE REMOVE-->
<script language="JavaScript" src="http://ads.mgmt.somee.com/serveimages/layerad1/adscrpt1.js"></script>
<div id="y_gc_div_adcntr" style="visibility:visible;background-color:#FFFFFF;margin:0px;padding:0px;width:195px;z-index:30000;top:0px;float:right;"><div id="y_gc_div_mast" style="border:000001px solid; width: 195px;visibility: visible;background-color: #FFFFFF;position: absolute;z-index: 30001;top: 0px">
  . .. . . .. . . . . . .. . . . .. . . . .//省略的代码    
</div></div></div><script language = javascript>if(!checkFrame()) closeAu('y_gc_div_au1');</script>
<!--SCRIPT GENERATED BY SERVER! PLEASE REMOVE-->



问题回到本文的题目了。
我们存储一下代码为文件 clearAd.js:

//File Start
document.all.y_gc_div_adcntr.style.display='none'
//File End

 

我们在页面文件的head中插入如下代码:

<script src='clearAd.js' defer></script>

 

这个defer很重要,它表示将在代码下载完毕后再执行。这样,刚才的问题也就真正解决了。

OK,很容易吧?站长们,还等什么,去除掉你们不喜欢的广告吧!

注:效果展示:偶的somee空间http://transbaker.somee.com的首页已经添加了去除广告代码。

 

posted @ 2005-01-04 17:22  ZhZhen  阅读(4679)  评论(20编辑  收藏  举报