yecho 发表于 2010 年 10 月 2 日 20:11:26

Godaddy免费空间广告去除方法


Godaddy注册域名是送免费空间的,还带php和mysql,可以架空间玩,不过又发现这个免费空间是带广告的,很让人不爽。它这个加广告的方法是在每个html页面(似乎根据Content-Type判断)加上一段代码:</object> </layer> </span> </div> </table> </body> </html> <!– adsok –><script language=’javascript’ src=’https://a12.alphagodaddy.com/hosting_ads/gd01.js’> </script>最后那个js所做的事情是在你的<body>最开始加一段广告,前面那堆标签是为了防止你用开放的标签搞掉他的script。于是每次打开页面之后就会出现一个广告。
  最先想到的办法是用body的onload把他放广告的东西搞掉,这个很简单,直接把他生成的iframe弄个style.display=’none’或者style.height=’0px’就可以了。但是很不幸的是这样虽然最后是没广告了,中间却有一段时间是能看到广告的,假设网速慢的话,可以看到的时间很长。另外,他的js里很恶心地设置了body的margin和padding,这样原来设计的页面就变样了。因此这个办法是不可接受了。
  接下去有两条路解决这个问题,一是用标签套掉,让他不执行这个js,一个是在它前面放一段js让他的js失效。幸运的是,两种方法都可行。
  用标签套掉比较简单。虽然广告代码写了一堆标签闭合来防止这个方法,但是他忘记了pre和iframe。经测试,半个pre标签在这里是无效的,js照样执行了,而半个iframe却很完美,加个<iframe style=’display:none;’> 在</body>之后,广告就彻底蒸发了。这个方法优点是简单,非常简单,缺点是尽管看不到了,但是其实广告加载还是执行了,速度很慢(js加载不慢,但是js又去搞个广告代码下来就慢了)。
  于是需要研究放点代码让他js失效的问题。先看他的js代码,发现并不是任何时候都显示广告的,当你的域名后缀是.mobi的时候就不显示,原因也许是对mobi域名的推广,也许是怕广告把手机浏览器搞崩。不过不管怎样,这至少留下了一个斩草除根的方法。首先想到的是写个和他的判断函数同名参数也一样的函数在前面,这样他函数定义的时候会出错然后调用的是我的函数,返回个true给他就可以了。结果实验之后发现JavaScript在这种情况下不会报错,而会直接用后面的函数覆盖了前面的!只能另辟蹊径。他用了String.search来判断document.domain中是不是有”.mobi”,显然document.domain是不能乱改的(不是不想改,是改不掉),那就改String.search吧。写个函数String.prototype.search = function(a,b){ return 1; }在它前面重载一下,这下世界真的清净了,广告那段恶心还巨大的HTML代码压根不会被生成了。另外,这样的重载不会影响在它之前的JavaScript,因此在</body>后面做这个事情,不会破坏页面上原来的东西。
  这两个方法,或者它们的改进,应该能适合其他各种会在最后给你加广告代码的服务。  Update:其实不用iframe而用<noscript>也能起作用,而且更加干净,连他的js都不会加载。但是这样很容易被godaddy的自动监测发现,把空间给砍了。

页: [1]
查看完整版本: Godaddy免费空间广告去除方法