首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 关闭子窗体刷新父窗体

在JavaScript中,关闭子窗口并刷新父窗口通常涉及到window.opener对象的使用,这个对象允许子窗口访问并操作打开它的父窗口。

以下是一个简单的示例,展示了如何在子窗口关闭时刷新父窗口:

代码语言:txt
复制
// 在子窗口中执行以下代码
function closeAndRefreshParent() {
    // 刷新父窗口
    if (window.opener && !window.opener.closed) {
        window.opener.location.reload();
    }
    // 关闭当前窗口
    window.close();
}

你可以在子窗口的某个事件处理函数中调用closeAndRefreshParent函数,例如在用户点击关闭按钮时。

基础概念

  • window.opener: 当一个窗口打开另一个窗口时,新窗口的window.opener属性会引用打开它的窗口对象。
  • location.reload(): 这个方法用于重新加载当前文档。

优势

  • 用户体验: 当子窗口中的数据更新后,父窗口可以立即看到这些变化,无需用户手动刷新。
  • 实时性: 数据同步更加实时,减少了用户等待的时间。

应用场景

  • 表单提交: 用户在子窗口提交表单后,父窗口可以立即显示提交结果。
  • 数据更新: 子窗口更新数据后,父窗口需要反映这些变化。

注意事项

  • 安全性: 使用window.opener时要小心,确保不会被恶意网站利用来攻击父窗口。
  • 浏览器兼容性: 大多数现代浏览器都支持window.openerlocation.reload(),但在非常旧的浏览器中可能会有兼容性问题。

解决问题的方法

如果在尝试关闭子窗口并刷新父窗口时遇到问题,可以检查以下几点:

  1. 确保子窗口是由父窗口打开的: window.opener只有在子窗口是由父窗口打开时才可用。
  2. 确保子窗口没有关闭: 在调用window.opener.location.reload()之前,检查window.opener是否存在且未关闭。
  3. 跨域问题: 如果子窗口和父窗口不在同一个域,浏览器的同源策略可能会阻止访问window.opener

示例代码

假设父窗口有一个按钮,点击后打开子窗口:

代码语言:txt
复制
<!-- 父窗口 -->
<button onclick="openChildWindow()">Open Child Window</button>

<script>
function openChildWindow() {
    window.childWindow = window.open('child.html', 'ChildWindow', 'width=400,height=300');
}
</script>

子窗口中有一个按钮,点击后关闭子窗口并刷新父窗口:

代码语言:txt
复制
<!-- 子窗口 (child.html) -->
<button onclick="closeAndRefreshParent()">Close and Refresh Parent</button>

<script>
function closeAndRefreshParent() {
    if (window.opener && !window.opener.closed) {
        window.opener.location.reload();
    }
    window.close();
}
</script>

通过这种方式,你可以在子窗口关闭时刷新父窗口,确保数据的实时同步。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

实现iframe父窗体与子窗体的通信

本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息。同时本文会提供一个可运行的实例代码,实现在父窗体中,获取到来自子窗体的数据的效果。...(2)当子窗体触发了一个事件后,要给父窗体传一个跳转地址的url。父窗体监听到这个事件后,根据接收到的url,来更新当前父窗体的url,实现页面的跳转。...这里分别是父窗体和子窗体的代码实现,可直接在浏览器中打开查看效果,其中messenger.js可以在这里下载,放到项目目录下。 父窗体: 子窗体也要先引入messenger.js,同时初始化一个messenger到一个统一的项目中,其中第一个参数为自己页面messenger对象的名字,第二个参数为项目名称;然后添加消息对象,告知子窗体的window...同时提供了一个完整的实例,可以实现子窗体向父窗体传递消息,父窗体通过监听消息事件,来获取子窗体消息的目的。如有问题,欢迎指正。

9.8K771
  • C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用)

    ”与“Chilid子窗体”之间如何相互的调用方法。...C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用) 看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写: C# Code: //父窗体是是frmParent,子窗体是frmChildA...//在父窗体中打开子窗体 frmChildA child = new frmChildA(); child.MdiParent = this; child.Show(); //子窗体调父窗体方法...如果父窗体与子窗体在同一个模块内看似没有错,因为这种反向引用在同一个模块内是可行的,但程序不能这么写,你把它写死了!固化了!...假设我们的项目不断在扩展,需要将父窗体与子窗体分开在不同的模块,这段代码就完了!因为父窗体模块必须引用子窗体模块,而子窗体需要用到frmParent的类,又要引用父窗体的模块!

    8.4K20

    C# WPF MVVM模式下在主窗体显示子窗体并获取结果

    01 — 前言 在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以: Form2 f2 = new Form2(); f2.Show(); 或者 Form2...所以正常是通过调用框架下得WindowManager接口,在window后台代码中通过WindowManager注册需要弹出的窗体类型,在ViewModel通过WindowManager的Show或ShowDialog...02 — ShowDialog用法实现 首先实例化新的子窗体SubShowWindowViewModel ,然后通过CM框架的ioc容器获取IWindowManager接口,通过接口的ShowDialog...调出子窗体,ControlTestStr 用来显示子窗体的赋值并在界面显示。...ControlTestStr = subShowWindowViewModel.SubShowWindowStr; } } } 03 — 结果演示 ControlTestStr 获取到了新窗体的赋值并显示到了界面

    1.8K10

    Js窗体window大小设置(转)

    offsetParent 属性指定的父坐标的高度  offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置  offsetTop:获取对象相对于版面或由...offsetTop 属性指定的父坐标的计算顶端位置  event.clientX 相对文档的水平座标  event.clientY 相对文档的垂直座标  event.offsetX 相对容器的水平坐标...clientWidth、offsetWidth、clientHeight、offsetHeight均无关)  function resize(){           var win =  Ext.fly('窗体对象组件...');//获得要调整的窗体,注意这里先用Ext.fly的方式来获取组件 ,如果不行再换别的,如getCmp,get等                                                                  ...                    listeners: {                           close:function(w){                               //关键部分:关闭窗口前先还原

    6.1K20

    在Office应用中打开WPF窗体并且让子窗体显示在Office应用上

    我们可以简单的实例化一个WPF窗体对象然后在Office应用程序的窗体上打开这个新的WPF窗体,此时Office应用的窗体就是WPF的宿主窗体。...然后宿主窗体跟Office应用并不是在一个UI线程上,子窗体很可能会在宿主窗体后面看不到。...这个时候需要调用Win32函数,将Office应用的窗体设置为WPF子窗体的父窗体,这个函数的形式定义如下: [DllImport("user32.dll", SetLastError = true)]...下面方法是一个完整的方法,可以通过反射实例化一个WPF窗体对象,然后设置此WPF窗体对象为Office应用程序的子窗体,并正常显示在Office应用程序上。...WindowInteropHelper(winBox); winBoxIntreop.EnsureHandle(); //将Excel句柄指定为当前窗体的父窗体的句柄

    1.6K50

    VB 子窗体被PictureBox控件挡住无法显示

    1、问题描述     VB做机房收费系统的时候,用的MDI主窗体,在主窗体上加了一个Picturebox控件,运行的时候,点了子窗体,但是却没有出现,后来才发现,子窗体被Picturebox控件给当在了后面...2、问题原因    在MDI程序中,子窗体实际位于MDIClient里,就是说,子窗体的父窗体是MDIClient,而PictureBox和MDIClient属于同一级的    层次结构    ThunderMDIForm-MDIForm1...   --MDIClient    ---ThunderFormDC-Form1  子窗体1    ---ThunderFormDC-Form2  子窗体2    --ThunderPictureBoxDC...参数:    hWndChild:子窗口句柄。hWndNewParent:新的父窗口句柄。如果该参数是NULL,则桌面窗口就成为新的父窗口。    ...返回值:    如果函数成功,返回值为子窗口的原父窗口句柄;如果函数失败,返回值为NULL。

    1.4K20

    如果在BackgroundWorker运行过程中关闭窗体…

    由于操作是异步执行的,用户可能在异步操作执行过程中关闭当前窗体,而窗体的关闭会伴随着Dispose方法的执行。...一、一个简单的例子 我们写一个简单的例子来说明上述的场景:在一个非主窗体(主窗体的关闭会导致程序的终止)的Windows窗体中,一个BackgroundWorker被用于异步地执行一段耗时的操作。...当该窗体被显示出来后,点击按钮让注册到该BackgroundWorker的异步操作开始执行,然后在操作结束之前(10秒)将当前窗体关闭。...而实际上,我们通常注册该事件在窗体上进行一些状态信息的显示,既然窗体都被关闭,这些操作就无需执行。...那么,有什么方式可以确保在窗体关闭的状态下阻止RunWorkerCompleted事件处理程序的执行呢?

    1.2K110

    layer实现关闭弹出层刷新父界面功能详解

    ,因为在操作逻辑上,手动关闭弹出框,应该不触发刷新操作,只有当弹出框的处理逻辑执行成功后,调用函数关闭弹出框才触发父界面刷新操作,基于这个逻辑,应该选择方案一。...方案二,不管怎样都会刷新页面,实际上无端的增加了服务器的处理压力。 方案二:可以解决子页面处理后的结果发送给子页面的父页面的问题。...对于layer.js出现回调关闭父类的弹出层时,之前的表单的submit失效的问题: 如何解决:网上有很多,有的是转为ajax的请求,在数据传输完再关闭父类的弹出层: 下面是关闭父弹出层的办法: 1 2...layer },500); 我还需要在关闭父类窗口后再打开一个窗口,则怎么解决,后面发现layer.js留有一个好的方式,那就是调用父窗口的方法,这个不受子窗口的影响,通过:parent.父类方法名(...未经允许不得转载:肥猫博客 » layer实现关闭弹出层刷新父界面功能详解

    4.7K60
    领券