关于窗口跳转的一些总结
在应用有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方式
1 2 3 | <script language= "JavaScript" type= "text/javascript" > window.location.href= "top.jsp" ; </script> |
注意:如果top.jsp中有iframe标签,则top.jsp页面将会在iframe中被打开。
2、window.loction.replace方式实现页面跳转,注意跟第一种方式的区别
1 2 3 | <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有小小区别
1 2 3 | <script language= "JavaScript" > self.location= 'top.htm' ; </script> |
4、top.location
1 2 3 | <script language= "javascript" > top.location= 'xx.jsp' ; </script> |
5、不推荐这种方式跳转
1 2 3 | <script language= "javascript" > window.history.back(- 1 ); </script> |
6、页面自动刷新:把如下代码加入<head>区域中
1 | <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、子窗口刷新父窗口
1 2 3 4 | <script language=JavaScript> self.opener.location.reload(); </script> (或<a href= "javascript:opener.location.reload()" >刷新</a> ) |
4、如何刷新另一个框架的页面用
1 2 3 | <script language=JavaScript> parent.另一FrameID.location.reload(); </script> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决