<script language="javascript">
//use top/parent/self location
if(top.location!=self.location){
top.location=self.location;
}
//Use self~top~parent
if(self!=top){
top.location=self.location;
}
if(window.top!=window.parent){
alert("window对象-被嵌套两层");
}
//The following also work
(t=window.top)&&t==window.self||alert("短路计算-被嵌套一层或多层");
(t=window.top)&&t==window.parent||alert("短路计算-被嵌套两层");
</script>
不过道高一尺魔高一丈, 总有办法应对的. 例如最简单, 老子禁用JS看你跳啥! 然而, 禁止JS会导致一些链接也点不开..这篇东东就介绍了使用
onbeforeunload
来搞Digg.方法1: 利用HTML5 sandbox
可以参考这篇Play safely in sandboxed IFrames东东介绍或者SOF上的讨论. 简单说,HTML的iframe引入sandbox
属性, 可以通过sandbox属性设置一些权限. 给给sandbox的值是允许可用的, 而不在里面则会被禁用. 例如我们要防top跳转, 就要取消掉allow-top-navigation
,如:<iframesandbox="allow-same-origin allow-scripts allow-popups allow-forms allow-pointer-lock"src="http://www.example.com"</iframe>
allow-scripts
来启用JS. 如果要全部取消, 可以sandbox=""
对于老的IE还可以
security="restricted"
来限制(会disable掉JS).方法2:
双重iframe可以阻止强制跳转。但是,第一层的iframe会覆盖了第二层的。所以要把第一层的做成透明,然后第二层嵌套需要的网页。做起来并不简单..方法3:
在老IE可以:<script type="text/javascript"> var location=document.location; </script>
但在Chrome实践证明会反复跳转死循环.