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 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
JavaScript修改css样式style动态改变元素样式
Dec 16 Javascript
js如何获取object类型里的键值
Feb 18 Javascript
node.js中的fs.unlinkSync方法使用说明
Dec 15 Javascript
jquery实现动态改变div宽度和高度
May 08 Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
Jul 26 Javascript
Vue中render方法的使用详解
Jan 26 Javascript
vue实现的请求服务器端API接口示例
May 25 Javascript
vue+elementUI动态生成面包屑导航教程
Nov 04 Javascript
vue 中几种传值方法(3种)
Nov 12 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
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
js封装成插件_Canvas统计图插件编写实例
2017/09/12 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
nodejs检测因特网是否断开的解决方案
2019/04/17 NodeJs
详解如何在Vue项目中导出Excel
2019/04/19 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
Python实现获取命令行输出结果的方法
2017/06/10 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
Sanic框架基于类的视图用法示例
2018/07/18 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
服装促销活动方案
2014/02/23 职场文书
避暑山庄导游词
2015/02/04 职场文书
老干部座谈会主持词
2015/07/03 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
Go中的条件语句Switch示例详解
2021/08/23 Golang
详解Python中的for循环
2022/04/30 Python