关于窗口跳转的一些总结

  在应用有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>

原文地址:https://www.cnblogs.com/javahr/p/8409324.html

时间: 2024-10-07 23:47:35

关于窗口跳转的一些总结的相关文章

Android窗口跳转

1.原始界面 package com.fish.helloworld; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; impo

Android带返回值的窗口跳转

1.AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fish.helloworld" android:versionCode="1" android:vers

页面嵌套iframe后,点击里面的链接,然后父窗口跳转(子窗口控制父窗口的链接跳转)

做app的时候遇到一个问题,一个页面,然后里面嵌套了一个另一个页面,想实现点击里面的链接,然后外面进行跳转,不然的话,里面的页面永远出不来, 后面想了个办法,app的页面都是打开打开,不关闭的,然后由上一个页面用postmessage进行监听,然后子窗口发送信息给父窗口,父窗口接到信息后进行 页面跳转,Android可以,然而ios却不行,坑了:只能想另外一种办法, app打开页面不是都不会关闭的嘛,然后让这个top页面去轮询读取cookie,目标页面 判断请求头部,是否为移动端访问(因为目标页

代码实现窗口跳转

UINavigationController类方法跳转窗口: - (void)showViewController:(UIViewController *)vc sender:(id)sender - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; storyboard实现窗口跳转: UIViewController类的方法 - (void)performSegueWithI

WPF窗口跳转及window和page区别

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 刚接触WPF,有两个概念不是很懂,现理解如下: 1:window和page谁包含谁的问题 一新建WPF应用程序,发现默认启动界面是一个window,将默认启动改为page,没有错误.但是如果在page中执行如下程序报错: this.content = new Window1(); 错误信息是:window是在属性结构的根目录.那么,

pyqt5窗口跳转

如何在窗体A里点击按钮跳转到窗体B 1.窗体B 的UI文件 1 # -*- coding: utf-8 -*- 2 3 # Form implementation generated from reading ui file 'viewTableUi.ui' 4 # 5 # Created by: PyQt5 UI code generator 5.9 6 # 7 # WARNING! All changes made in this file will be lost! 8 9 from Py

QQ窗口跳八字舞

//先有思路 后有代码 总是不知不觉中乱敲一通 今天做个标记 感谢老师课堂上的讲解#include <stdio.h> #include <math.h> #include <Windows.h> #define CENTER_X 500 #define CENTER_Y 200//8字中间的那个中心点坐标 #define R 100// 半径 #define PI 3.141592 int status = 1;//状态 来表示顺时针和逆时针 先在右侧顺时针转圈 in

模态窗口跳转问题

前面解决了模态窗口的刷新问题,但是当使用location.href=url 时又回出现新打开页面的问题 可以用下面的方法解决: function go_link(url) { var link = document.createElement("a"); link.href = url; document.body.appendChild(link); link.click(); }

win7、win8上SaveFileDialog窗口跳不出的问题

xp上做的开一个线程 线程中数据以Excel形式保存到指定文件中的程序  放到win7 win8上都不跳出保存的对话框? 解决: 在win7.win8上都要对线程  在线程启动前设置其单元状态.设置为创建进入其单线程单元. Thread threadsave = new Thread(new ThreadStart(savedatatoExcel)); threadsave.SetApartmentState(ApartmentState.STA); //保存窗口在win7上显示时 必须对线程加