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 相关文章推荐
Wordpress ThickBox 添加“查看原图”效果代码
Dec 11 Javascript
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
Dec 23 Javascript
JavaScript类型系统之Object详解
Jan 07 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
vue加载完成后的回调函数方法
Sep 07 Javascript
微信小程序实现底部导航
Nov 05 Javascript
JS通过识别id、value值对checkbox设置选中状态
Feb 19 Javascript
详解vue v-model
Aug 31 Javascript
使用TS来编写express服务器的方法步骤
Oct 29 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
Nov 12 Javascript
JavaScript实现点击出现子菜单效果
Feb 08 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
德生9700DX电路分析
2021/03/02 无线电
PHP新手上路(六)
2006/10/09 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
PHP asXML()函数讲解
2019/02/03 PHP
jQuery语法总结和注意事项小结
2012/11/11 Javascript
使用jquery实现以post打开新窗口
2014/03/19 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
jQuery仿写百度百科的目录树
2017/01/03 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
关于vue中 $emit的用法详解
2018/04/12 Javascript
node.js中Buffer缓冲器的原理与使用方法分析
2019/11/23 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
[01:45]亚洲邀请赛互动指南虚拟物品介绍
2015/01/30 DOTA
如何运行Python程序的方法
2013/04/21 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
浅谈Python __init__.py的作用
2020/10/28 Python
Python爬虫过程解析之多线程获取小米应用商店数据
2020/11/14 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
公司人力资源的自我评价
2014/01/02 职场文书
生产班组长岗位职责
2014/01/05 职场文书
入党申请自荐书范文
2014/02/11 职场文书
网页美工求职信范文
2014/04/17 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
《中彩那天》教学反思
2016/02/24 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js