我是靠谱客的博主 想人陪机器猫,最近开发中收集的这篇文章主要介绍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






最后

以上就是想人陪机器猫为你收集整理的JS防止页面被嵌入框架的全部内容,希望文章能够帮你解决JS防止页面被嵌入框架所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部