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条件判断使用小技巧总结
Sep 08 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
Dec 11 Javascript
目前流行的JavaScript库的介绍及对比
Sep 29 Javascript
ExtJS实现文件下载的方法实例
Nov 09 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
js实现文本上下来回滚动
Feb 03 Javascript
让你5分钟掌握9个JavaScript小技巧
Jun 09 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
Jun 21 Javascript
layui异步加载table表中某一列数据的例子
Sep 16 Javascript
vue实现登录拦截
Jun 29 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
使用PHP+MySql实现微信投票功能实例代码
2017/09/29 PHP
PHP小白必须要知道的php基础知识(超实用)
2017/10/10 PHP
重定向实现代码
2006/11/20 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
Javascript中浮点数相乘的一个解决方法
2014/06/03 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
2014/07/21 Javascript
avascript中的自执行匿名函数应用示例
2014/09/15 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
jQuery链使用指南
2015/01/20 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
React.js入门实例教程之创建hello world 的5种方式
2016/05/11 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
js实现彩色条纹滚动条效果
2017/03/15 Javascript
js微信应用场景之微信音乐相册案例分享
2017/08/11 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
Python简单进程锁代码实例
2015/04/27 Python
理论讲解python多进程并发编程
2018/02/09 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
python实现一组典型数据格式转换
2018/12/15 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
Python中Selenium模块的使用详解
2020/10/09 Python
Python模块常用四种安装方式
2020/10/20 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
外语系大学生自荐信范文
2014/03/01 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
销售人员管理制度
2015/08/06 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技