JS防止页面被嵌入框架

先看下面关于浏览器window对象的解释

http://www.w3school.com.cn/jsref/dom_obj_window.asp

Window 对象表示浏览器中打开的窗口。

如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。

注释:没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。


下面是几个常见的windwo对象属性:

1.top
该变更永远指分割窗口最高层次的浏览器窗口。如果计划从分割窗口的最高层次开始执行命令,就可以用top变量。 


2.opener
opener用于在window.open的页面引用执行该window.open方法的的页面的对象。例如:A页面通过window.open()方
法弹出了B页面,在B页面中就可以通过opener来引用A页面,这样就可以通过这个对象来对A页面进行操作。 


3.parent
parent用于在iframe,frame中生成的子页面中访问父页面的对象。例如:A页面中有一个iframe或frame,那么iframe
或frame中的页面就可以通过parent对象来引用A页面中的对象。这样就可以获取或返回值到A页面中。


4.self

另外self 指的是当前窗口

注意parent与opener的区别:

parent指父窗口,在FRAMESET中,FRAME的PARENT就是FRAMESET窗口。 
opener指用WINDOW.OPEN等方式创建的新窗口对应的原窗口。 
parent是相对于框架来说父窗口对象 
opener是针对于用window.open打开的窗口来说的父窗口,前提是window.open打开的才有

document.parentWindow.menthod()調用父頁面的方法

附:Window对象、Parent对象、Frame对象、Document对象和Form对象的阶层关系 
Window对象→Parent对象→Frame对象→Document对象→Form对象,
如下: parent.frame1.document.forms[0].elements[0].value;


接下来看看关于防止登陆页面被嵌入到frame中的js脚本(实际项目代码),原来的业务系统是被嵌入到一个frameset的frame中,因此当session过期问题,很可能就退出回到登陆页面,此时发现登陆页面嵌入到原来的frame中去了,解决办法如下:

<script type="text/javascript">
	$(document).ready(function(){
		//让login.jsp页面始终在最上层,不嵌入到别的frame中
		if(parent.document != this){
			top.location.href="<%=request.getContextPath()%>/login.jsp";
		}};
</script>

这样在页面加载的时候就会先判断当前父窗口对象的document对象是不是等于当前文档document对象,如果不是,则将top对象链向登陆页面。


另一种方式可以的,只要判断出当前的顶层top对象不是当前的window对象即可

<script type="text/javascript">
	if (window!=top){ // 判断当前的window对象是否是top对象
		top.location.href =window.location.href; // 如果不是,将top对象的网址自动导向被嵌入网页的网址
	}
</script>



参考博客:

http://www.ruanyifeng.com/blog/2008/10/anti-frameset_javascript_codes.html

http://www.ruanyifeng.com/blog/2010/08/anti-frameset_javascript_codes_continued.html






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值