在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法打开当前窗口的那个窗口。
1、window.self
功能:是对当前窗口自身的引用。它和window属性是等价的。
语法:window.self
注:window、self、window.self是等价的
2、window.top
功能:返回顶层窗口,即浏览器窗口。
语法:window.top
注:如果窗口本身就是顶层窗口,top属性返回的是对自身的引用
3、window.parent
功能:返回父窗口
语法:window.parent
注:如果窗口本身就是顶层窗口,parent属性返回的是对自身的引用
在框架网页中,一般父窗口就是顶层窗口,但如果框架中还有框架,父窗口和顶层窗口就不一定相同了。
总结:你应该当将框架视为窗口中的不同区域,框架是浏览器窗口中特定的部分。一个浏览器窗口可以根据你的需要分成任意多的框架,一个单个的框架也可以分成其它多个框架,即所谓的嵌套框架。
注:parent与opener的区别:
parent指父窗口,在frameset中,frame的parent就是frameset窗口。
opener指用window.open方式创建的新窗口对应的原窗口。
parent是相对于框架来说父窗口对象。
opener是针对于用window.open打开的窗口来说的父窗口,前提是window.open打开的才有。
跳转总结:
1、"window.location.href"、"location.href"——是本页面跳转
2、"parent.location.href"——是上一层页面跳转
3、"top.location.href"——是最外层的页面跳转
一、js方式的页面跳转
1、window.location.href方式
<script language="JavaScript" type="text/javascript">
window.location.href="top.jsp";
</script>
注意:如果top.jsp中有iframe标签,则top.jsp页面将会在iframe中被打开。
2、window.loction.replace方式实现页面跳转,注意跟第一种方式的区别
<script language="javascript">
window.location.replace("http://www.dayanmei.com");
</script>
window.location.href和window.loction.replace的区别:
有3个jsp页面(a.jsp, b.jsp, c.jsp),进系统默认的是a.jsp ,当我进入b.jsp的时候, b.jsp里面用window.location.replace("c.jsp");与用window.location.href ="c.jsp";从用户界面来看是没有什么区别的,但是当c.jsp页面有一个"返回"按钮,调用window.history.go(-1); wondow.history.back();方法的时候,一点这个返回按钮就要返回b.jsp页面的话,区别就出来了,当用 window.location.replace("c.jsp");连到c.jsp页面的话,c.jsp页面中的调用 window.history.go(-1);wondow.history.back();方法是不好用的,会返回到a.jsp 。
3、self.location方式实现页面跳转,和下面的top.location有小小区别
<script language="JavaScript">
self.location='top.htm';
</script>
4、top.location
<script language="javascript">
top.location='xx.jsp';
</script>
5、不推荐这种方式跳转
<script language="javascript">
window.history.back(-1);
</script>
6、页面自动刷新:把如下代码加入<head>区域中
<meta http-equiv="refresh" content="20">
其中20指每隔20秒刷新一次页面.
7、<a href="javascript:history.go(-1)">返回上一步</a>
8、<a href="<%=Request.ServerVariables("HTTP_REFERER")%>">返回上一步</a>
9、<a href="javascript:" onClick="window.open('http://hi.baidu.com/630270730','','height=500,width=611,scrollbars=yes,status=yes')">打开新窗口</a>
10、window.history.forward()返回下一页
11、window.history.go(返回第几页,也可以使用访问过的URL)
二、iframe中页面跳转
1、iframe页面跳转:
"window.location.href"、"location.href"是本页面跳转
"parent.location.href"是上一层页面跳转
"top.location.href"是最外层的页面跳转
例:如果A,B,C,D都是jsp,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页面跳转
2.iframe中的target
如果D页面中有form的话, form提交后D页面跳转
<form target="_blank">: form提交后弹出新页面
<form target="_parent">: form提交后C页面跳转
<form target="_top"> : form提交后A页面跳转
三、iframe页面刷新
D 页面中这样写:"parent.location.reload();": C页面刷新
(当然,也可以使用子窗口的 opener 对象来获得父窗口的对象:window.opener.document.location.reload(); )
"top.location.reload();": A页面刷新
注:window.location.href = window.location.href 也可以实现页面刷新,它与reload的区别是:如果在reload之前向服务器提交过数据,那么执行reload会重新执行这个提交操作。 而window.location.href = window.location.href 则不会,因为它是重新进入页面。
举个例子:如果A,B,C,D都是html,D是C的iframe,C是B的iframe,B是A的iframe,如果D中js这样写
1、window.open("Url地址","_blank") = window.open("Url地址");//在新窗口打开
2、location = window.location = location.href = window.location.href =self.location.href = "Url地址";//在D页面实现展现
3、window.open("Url地址","_self");//在D页面实现展现
4、parent.location.href = window.parent.location.href ="Url地址";//在C页面实现展现
5、window.open("Url地址","_parent");//在C页面实现展现
6、top.location.href = window.top.location.href ="Url地址";//在A页面实现展现
7、window.open("Url地址","_top");//在A页面实现展现
8、parent.parent.location = "Url地址";//在B页面实现展现
9、parent.open("Url地址","_parent") = parent.parent.open("Url地址","_self");//在B页面实现展现
如果D页面中有form的话:
1、<form>: form提交后D页面跳转
2、<form target="_blank">: form提交后弹出新页面
3、<form target="_parent">: form提交后C页面跳转
4、<form target="_top"> : form提交后A页面跳转
关于页面刷新,D 页面中这样写:
1、"parent.location.reload();": C页面刷新 (当然,也可以使用子窗口的 opener 对象来获得父窗口的对象:window.opener.document.location.reload(); )
2、"top.location.reload();": A页面刷新
其他应用:
1、js判断窗口或页面是不是在框架中打开的
<script type="text/javascript"> var b = window.parent==window.self; document.write( "当前窗口是否是底层窗口:"+b ); </script>
2、如果当前窗体不是顶级窗体,就把自己变成最顶层。从而防止别人iframe使用(防止iframe嵌套),常用在登录界面
if (window.top !== window.self) { window.top.location = window.location; }
3、子窗口刷新父窗口
<script language=JavaScript>
self.opener.location.reload();
</script>
(或<a href="javascript:opener.location.reload()">刷新</a> )
4、如何刷新另一个框架的页面用
<script language=JavaScript>
parent.另一FrameID.location.reload();
</script>