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 表单规则集合对象
Jul 21 Javascript
ext checkboxgroup 回填数据解决
Aug 21 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
用JavaScript修改CSS属性的代码
May 06 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
Sep 18 Javascript
javascript判断变量是否有值的方法
Apr 20 Javascript
jQuery实现的仿select功能代码
Aug 19 Javascript
js仿小米官网图片轮播特效
Sep 29 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
Mar 30 jQuery
Vue实现active点击切换方法
Mar 16 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
Aug 14 Javascript
vue-cropper插件实现图片截取上传组件封装
May 27 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
松下Panasonic RF-B65电路分析
2021/03/02 无线电
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
php自动给网址加上链接的方法
2015/06/02 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
PHP中TP5 上传文件的实例详解
2017/07/31 PHP
php使用yield对性能提升的测试实例分析
2019/09/19 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
非常好的js代码
2006/06/27 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
详解vue-cli本地环境API代理设置和解决跨域
2017/09/05 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
Python实现翻转数组功能示例
2018/01/12 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
python如何操作mysql
2020/08/17 Python
python如何对链表操作
2020/10/10 Python
在职人员函授期间自我评价分享
2013/11/08 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
机关工会开展学习雷锋活动总结
2014/03/01 职场文书
会计工作决心书
2014/03/11 职场文书
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
小学生评语集锦
2014/04/18 职场文书
分公司负责人任命书
2014/06/04 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
毕业生党员个人总结
2015/02/14 职场文书
十二生肖观后感
2015/06/12 职场文书
关于远足的感想
2015/08/10 职场文书