我有一个关于编写框架破坏者破坏者的问题。我已经阅读了Frame Buster Buster ...需要破坏代码,但我需要进行额外的调整。
我在 [ http://my_domain.c0m/blog]上的博客中的内容正在显示在另一个显示三个“视图”的站点上。一个视图是一个提要,并没有特别困扰我。另外两个打扰我,我想打破两个。我还想允许具有框架权限的域例外。
在一个视图中,我的博客顶部的 html 顶部的内容似乎首先被复制以创建一个“快照”[ http://the_other_domain.c0m/copy_of_blog] ,然后该副本被框在 [ http: //the_other_domain.c0m/ ]。因此,在这种情况下,“子”副本都托管在 [ http://the_other_domain.c0m/]上。谷歌翻译做了类似的事情——但我觉得这没问题。所以,我想打破这个框架,同时也允许谷歌和那些已经复制到他们的电脑并希望在可能框架的实用程序中查看的人例外。
在另一个视图中,我网站的内容似乎被框起来了。所以在这种情况下 [ http://my_domain.c0m/blog_post]是由 [ http://the_other_domain.c0m/]框起来的。我想摆脱这个框架。但是,我的困难在于,我无法弄清楚如何做到这一点,同时将谷歌翻译或个人电脑用户框架的例外情况保留在家里。
到目前为止我的解决方案(我对javascript并不是特别熟悉。所以,请不要对冗余和缺乏知识笑得太厉害):
我能够使用以下方法破坏第一帧:
<SCRIPT type="text/javascript" >
var topWindow = String(top.location)
var topWord=topWindow.split("/")
var selfWindow = String(self.location)
var selfWord=topWindow.split("/")
var correctLocation ="http://my_domain.c0m/blog"
var correctWord2="my_domain.c0m"
var http="http:"
if( ( (topWord[2] != correctWord2) || (selfWord[2] != correctWord2) )
&& (topWord[2] != 'translate.googleusercontent.com' ) && (topWord[0] == http ) ){
document.write("message expressing my opinion about the asshattery going in here.]" )
setTimeout("redirect_after_pause()",8000)
}else{
//document.write("<p><font color='purple'>Hi there! Javascript is working.</font> </p> " )
}
function redirect_after_pause() {
var correctLocation ="http://my_domain.c0m/blog"
top.location=correctLocation
}
我知道这是低效的。但它有效并实现了我的目标,即 a)我的法国读者要求的 googlecontent 翻译和 b)用户在下载到他们的电脑的实用程序中构建的情况(我认为 uri 以“文件”开头:"。
现在的困难是:这不适用于托管在我的域中的内容在另一个域中构建的视图。我相信我已经将问题归结为 var topWindow = String(top.location) 不允许在我的子窗口中出现。原则上,这会起作用:
<script type="text/javascript">
if(top != self) top.location.replace(location);
然而,我认为它搞砸了谷歌翻译的使用,它使用一个顶部框架来保存他们对我的内容的翻译也托管在 [ http://translate.google.com]。我怀疑它同样会搞砸可能会在某人的电脑上显示本地副本的阅读器,如果该副本显示在框架中。
如果有人可以指导我找到一个解决方案,我可以实施以打破两个框架,同时允许我的例外
顺便说一句:看起来有问题的网站正在使用 framebuster。我四处寻找,在他们的 /static/common.js?1345250291 代码中找到了这个:
enable_iframe_buster_buster:function(){var a=this,b=0;window.onbeforeunload=function(){b++};clearInterval(this.locks.iframe_buster_buster);this.locks.iframe_buster_buster=setInterval(function(){0<b&&(b-=2,a.flags.iframe_story_locations_fetched&&!a.flags.iframe_view_not_busting&&_.contains(["page","story"],a.story_view)&&NEWSBLUR.reader.active_feed&&($(".NB-feed-frame").attr("src",""),window.top.location="/reader/buster",$(".task_view_feed").click()))},1)},disable_iframe_buster_buster:function(){clearInterval(this.locks.iframe_buster_buster)}
这在一些特别密集的javascript中很深。无论它做什么,它似乎都不会影响我在我的内容被复制并托管在 [ http://the_other_domain.c0m/]的情况下破坏框架的能力。我还没有完全探索它是否破坏了简单的框架破坏器,因为早些时候我最近才意识到在与父框架具有不同域的子框架中禁止使用“var topWindow = String(top.location)”。
无论是否存在帧破坏者,我都希望在这里获得解决方案方面的帮助。我知道,如果一个网站现在以这种方式构建我的内容,那么令人讨厌的技术流行起来只是时间问题,我想在解决方案中编写代码,优雅地破坏这两种方法,同时为自己提供异常。提前致谢。