首 先我们了解一下:window.location.href、location.href、self.location.href、 parent.location.href、top.location.href他们的区别与联系,简单的说:几种location.href的区别 js实现网页被iframe框架功能 
"window.location.href"、"location.href"、"self.location.href"是本页面跳转 
"parent.location.href"是上一层页面跳转 
"top.location.href"是最外层的页面跳转 

举个例子说明(如上图): 
如果A,B,C,D都是普通页面,D是C的iframe,C是B的iframe,B是A的iframe, 
如果D中js这样写: 
"window.location.href"、"location.href":D页面跳转 
"parent.location.href":C页面跳转 
"top.location.href":A页面跳转 

如果D页面中有form的话: 
<form>: form提交后D页面跳转 
<form target="_blank">: form提交后弹出新页面 
<form target="_parent">: form提交后C页面跳转 
<form target="_top"> : form提交后A页面跳转 

关于页面刷新,D 页面中这样写: 
"parent.location.reload();": C页面刷新 (当然,也可以使用子窗口的 opener 对象来获得父窗口的对象:window.opener.document.location.reload(); ) 
"top.location.reload();": A页面刷新 

现 在回头看看,js实现网页防止被iframe框架功能就很简单了。假设frame.html文件中框架了content.html文件,那么思路是这样 的:在content.html中加入js检测自己本身top.location.href地址,是否为top.location.href地址。如果是 则没被嵌套,如果否的话即被嵌套了,这是我们可以提示一下。预览效果 

网页防止被框架方法代码: 


<script language="javascript"> 
if(top.location!==self.location){ 
WarningTxt1 = "content页面被iframe了!"; 
WarningTxt2 = "我们跳出iframe,直接访问content页面吧!"; 
alert(WarningTxt1); 
alert(WarningTxt2); 
top.location.href=self.location.href; 

</script> 



<SCRIPT LANGUAGE=JAVASCRIPT>

<!-- 

if (top.location !== self.location) {

top.location=self.location;

}

</SCRIPT>




iframe的防插与强插

网上通用的防插那版是(子):

if(top.location != self.location){
top.location = self.location;
}

强插方案为(父):

var location="";

其中这个location是对被赋值的top.location方法的覆盖,导致方法失效。

昨天又遇到另外一个版本(子):

if(window!=parent){
parent.navigate(location);
}

强插方案为(父):

var navigate="";

即是对parent.navigate方法的覆盖,导致再次引用失效。

那么两个和在一起的强插方案是,在iframe之前加入:

<script>var location="";var navigate="";</script>

介绍了“市面上”能见到的两种防御被iframe的方法,以及相应的变态突破方法。

貌似把“受害人”逼上绝路了,我们再来看看这两个方法:

它们都能够判断出自己已经被XX了,可是它们是怎么做的呢?

方法一说:先生,请您出去。

方法二说:同志,请您出去!

然而这先生也说了句:“我就不出去!”

因为“受害人”和这位先生又不是一家子,似乎通过命令对方还无可奈何 —— 同源策略!

但事实上,“请您出去”这种方式显然是针对君子不对小人的,所以Monyer教你一种好方法——“乱棍打出去!”

<script>
window.onload = function(){
if(top!=self){
var f = document.createElement("form");
f.action=location;
f.target="_parent";
document.body.appendChild(f);
f.submit();
}
};
</script>

目前我个人还没有找到突破的方法,所以至少比以上两种方法更暴力一些!