首先声明,somee是一个好空间,30M,支持asp,asp.net,access,fso....偶以前也是somee的用户。只是因somee不能绑定偶的域名,所以才放弃了这个好地方。
言归正传,我们先分析一下somee的插入广告形式。
两句代码去somee广告 ——谈怎样去除免费空间的广告
驿博网志 http://blog.transbaker.net 作者:zzn
偶最开始使用somee的时候,广告是插入在<body>标签的后面的。
假如你有如下一段html代码生成,那么代码将插入在提示位置。
</ head >
< body > <!-- 此处将被插入广告代码 -->
< table >
< tr >
< td > this is a test </ td >
</ tr >
</ table >
</ body >
要去除这种形势的代码,可以用两个方法。
1、既然Web服务器识别body标签的末标签。那么,利用浏览器的纠错功能,我们插入一个伪body标签在一个隐藏的层当中。将上述的HTML改为
</ 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就可以找到了。
如广告代码如下:
some Advertisement code
</ div >
或
some Advertisement code
</ div >
则使用
就可以解决问题了。
这里面有一种非常罕见的情况,假如你的本身的网页生成的html中就有这个id或name的标签。你就需要再麻烦一下,分析一下id和name的位置。按照html从上到下的看,id或者name相同的标签,index依次是从0开始的。把下面代码中[0]修改为广告代码中对应标签的位置就行了
另外一种方法就是使用GetElementsById[id],GetElementsByName[name]。比如上示的代码可以写为:
b、没有id或者name。这种比较罕见。不过也不是没有办法。你最好先下载一个被插入了广告的页面,修改一下html文件,在广告代码的最外层标签添加一个唯一的标记便于寻找,如添加id="HUR"。然后使用如下代码找到这个标签的位置。
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()出来的那个对话框,记住索引号。再回头修改上面的代码为最后的去除广告代码。
var divs = document.getElementsByTagName('div'); // 假设广告代码是嵌套在"<div>"标签中。
divs(divindex).style.display = 'none'; // divindex为刚才得到的索引号。
</ script >
经过以上的这些步骤,大部分插入性的广告你都可以应付了,那么 somee 的广告问题应该也就迎刃而解了。但是....
html是顺序执行的,即代码从上到下被下载执行。目前的somee将广告插入到文档最末。我使用了伪标签,发现它不是识别</html>为文档最末的!即当发生请求时,somee服务器文档读入到内存,在发布的时候自动在该段内存最末添加上它的广告代码!HTML是从上往下执行的,预先执行的命令对后出现标签无效。但是,最末的文档是服务器加入的,我们不能再该段文档中插入触发器,怎么办呢?
我们先把最后的去除广告的代码放在一个单独的js文件中。这样,如果空间商变化广告插入模式,我们也不用全站点的文档都作修改,只需要修改这个包含有效代码的文档就行了。
目前的somee的广告代码如下,插入在文档最末。
< 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:
document.all.y_gc_div_adcntr.style.display = 'none'
// File End
我们在页面文件的head中插入如下代码:
这个defer很重要,它表示将在代码下载完毕后再执行。这样,刚才的问题也就真正解决了。
OK,很容易吧?站长们,还等什么,去除掉你们不喜欢的广告吧!
注:效果展示:偶的somee空间http://transbaker.somee.com的首页已经添加了去除广告代码。