您的位置:首页 > 编程语言

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

2005-01-04 17:22 591 查看
首先声明,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" </div>



<div name="adlayer" </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">

//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的首页已经添加了去除广告代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: