我有一个关于编写frame-buster-buster的问题。我已经阅读了Frame Buster Buster ... buster code needed但我需要额外调整。
我的博客[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)用户在实用程序中框架下载到他们的PC(我认为uri的开头是“FILE” :”
现在困难:这不适用于在我的域中托管的内容在其他域中构建的视图。我相信我已经将问题跟踪到我的子窗口中不允许的var topWindow = String(top.location)。原则上,这可行:
<script type="text/javascript">
if(top != self) top.location.replace(location);
但是,我认为它搞砸了谷歌翻译的使用,谷歌翻译使用顶部框架,保存他们的内容翻译也托管在[http://translate.google.com]。我怀疑它同样搞砸了可能在某人的PC上显示本地副本的读者,如果该副本显示在一个框架中。
如果有人可以引导我找到解决方案,我可以实现在允许我的例外的同时打破两个框架
BTW:看来有问题的网站正在使用一个重磅炸弹。我戳了一下,在他们的/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)”在子帧中被禁止与父帧具有不同的域。
无论框架破坏器是否存在,我都希望在这里提供解决方案。我知道,如果一个网站现在以这种方式构建我的内容,那么令人讨厌的技术应该只是时间问题,我想在解决方案中编写代码,这些解决方案可以优雅地破坏这两种方法,同时为自己提供异常。提前致谢。