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 相关文章推荐
javascript是怎么继承的介绍
Jan 05 Javascript
ExtJS4如何给同一个formpanel不同的url
May 02 Javascript
jquery阻止后续事件只执行第一个事件
Jul 24 Javascript
jQuery实现的AJAX简单弹出层效果代码
Nov 26 Javascript
Json解析的方法小结
Jun 22 Javascript
JS填写银行卡号每隔4位数字加一个空格
Dec 19 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
简单实现节流函数和防抖函数过程解析
Oct 08 Javascript
vue 使用 canvas 实现手写电子签名
Mar 06 Javascript
react实现复选框全选和反选组件效果
Aug 25 Javascript
解读Vue组件注册方式
May 15 Vue.js
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
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
2010/04/07 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
js简单获取表单中单选按钮值的方法
2016/08/23 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
JS文件上传神器bootstrap fileinput详解
2021/01/28 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
浅谈Python中数据解析
2015/05/05 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
竞聘报告优秀范文
2014/11/06 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏