JS关闭子窗口并且刷新上一个窗口的实现示例


Posted in Javascript onMarch 10, 2020

在开发后台项目的时候产品那边提出了这个一个需求:用户点击“选择模板”的时候会弹出一个新窗口,在新窗口选择模板点击确定后,会关闭当前的新窗口,并且原来的那个窗口自动显示用户在新窗口的选择项。
这样会涉及到一个技术点,就是怎么通过JS来实现关闭子窗口并且刷新上一个窗口。

百度了很久,尝试了以下几种方案:

方案一:通过在子窗口的关闭函数中加入以下代码,即可实现父窗口的刷新。

window.opener.location.href = window.opener.location.href;

方案二:也是在子窗口的关闭函数中加入以下代码:

function closeMeAndReloadParent(){
  opener.location.reload();
  window.close();
}

以及方案三window.opener.location.reload();

方案四window.opener.reload();等等

结果发现以上方案全都不行,且都会报以下这种错误:

scrollbymyself.html:96 Uncaught DOMException: Blocked a frame with origin "null" from accessing a cross-origin frame.

不知道是我实现方式有问题还是别的未知原因,没方法,需求在那里,总是需要解决的,经过亲身实践,总结出了下面这种可行方法,虽有明显缺点,但也总算了解决了需求。

父界面的代码

<span onclick="openNewWindow()">点击打开新窗口</span>
<input type="text" class="parent-input">
<script>
  function openNewWindow() {
    document.querySelector(".parent-input").focus()
    window.open("scrollbymyself.html", "new window");
  }
  document.querySelector(".parent-input").onfocus = function () {
    console.log("获取到了焦点,可以在这里写逻辑代码")
  }
  console.log("页面重新刷新")
</script>

子界面的代码

<span onclick="closeCurrentWindow()">点击关闭当前窗口,并且更新上一个窗口的信息</span>
<script>
  function closeCurrentWindow() {
    console.log(window)
    opener.location.reload();
    window.close()
  }
</script>

把上面的代码应该到项目中,即可实现需求,如果不想让input显示在界面上,可以添加opacity: 0;样式属性。

注意:

添加display: none;属性的话,并不会触发input的获取焦点的事件函数。

到此这篇关于JS关闭子窗口并且刷新上一个窗口的实现示例的文章就介绍到这了,更多相关JS关闭子窗口内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
dojo 之基础篇
Mar 24 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
Sep 15 Javascript
JavaScript类属性的访问方式详解
Feb 11 Javascript
Javascript中对象继承的实现小例
May 12 Javascript
JavaScript获取当前网页标题(title)的方法
Apr 03 Javascript
ajax+jQuery实现级联显示地址的方法
May 06 Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 Javascript
学习使用bootstrap基本控件(table、form、button)
Apr 12 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
微信小程序 Tab页切换更新数据
Jan 05 Javascript
详解用vue.js和laravel实现微信授权登陆
Jun 23 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
Mar 10 #Javascript
Vue项目打包压缩的实现(让页面更快响应)
Mar 10 #Javascript
vue实现瀑布流组件滑动加载更多
Mar 10 #Javascript
JavaScript代理模式原理与用法实例详解
Mar 10 #Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 #Javascript
JavaScript实现指定数量的并发限制的示例代码
Mar 10 #Javascript
vue中的使用token的方法示例
Mar 10 #Javascript
You might like
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
JavaScript DOM基础
2015/04/13 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
js实现音乐播放控制条
2017/09/09 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
vue修改Element的el-table样式的4种方法
2020/09/17 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
Python并发:多线程与多进程的详解
2019/01/24 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
使用python画社交网络图实例代码
2019/07/10 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
半年思想汇报
2013/12/30 职场文书
借条如何写
2015/05/26 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
家庭经济困难证明
2015/06/23 职场文书
小学生暑假安全公约
2015/07/14 职场文书
css常用字体属性与背景属性介绍
2022/02/28 HTML / CSS
Python matplotlib多个子图绘制整合
2022/04/13 Python
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS