<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
,如:<iframe sandbox="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实践证明会反复跳转死循环.
No comments:
Post a Comment