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 相关文章推荐
ArrayList类(增强版)
Apr 04 Javascript
使用户点击后退按钮使效三行代码
Jul 07 Javascript
给Function做的OOP扩展
May 07 Javascript
javascript之学会吝啬 精简代码
Apr 25 Javascript
javascript实现修改微信分享的标题内容等
Dec 11 Javascript
JavaScript获取URL汇总
Jun 08 Javascript
JavaScript电子时钟倒计时第二款
Jan 10 Javascript
深入理解JS函数的参数(arguments)的使用
May 28 Javascript
jQuery实现的图片轮播效果完整示例
Sep 12 Javascript
JQuery 动态生成Table表格实例代码
Dec 02 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
May 26 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
Jul 10 jQuery
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
怎样在UNIX系统下安装MySQL
2006/10/09 PHP
Cannot modify header information错误解决方法
2008/10/08 PHP
iframe的onload在Chrome/Opera中执行两次Bug的解决方法
2011/03/17 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
浅谈js中的this问题
2017/08/31 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
vue-cli创建的项目中的gitHooks原理解析
2020/02/14 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
python读写文件操作示例程序
2013/12/02 Python
python中关于for循环的碎碎念
2017/06/30 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Django 重写用户模型的实现
2019/07/29 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
浅谈react路由传参的几种方式
2021/03/23 Javascript
工程测量与监理专业应届生求职信
2013/11/27 职场文书
园林资料员岗位职责
2013/12/30 职场文书
优秀团员个人事迹材料
2014/01/29 职场文书
自我鉴定 电子商务专业
2014/01/30 职场文书
工地质量标语
2014/06/12 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
交通事故协议书范本
2014/11/18 职场文书
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android