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 相关文章推荐
Flash+XML滚动新闻代码 无图片 附源码下载
Nov 22 Javascript
仿jQuery的siblings效果的js代码
Aug 09 Javascript
js里怎么取select标签里的值并修改
Dec 10 Javascript
JS中的prototype与面向对象的实例讲解
May 22 Javascript
单击和双击事件的冲突处理示例代码
Apr 03 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
Jun 09 Javascript
了不起的node.js读书笔记之node.js中的特性
Dec 22 Javascript
Sequelize中用group by进行分组聚合查询
Dec 12 Javascript
ES6 javascript中Class类继承用法实例详解
Oct 30 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 Javascript
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
JavaScript高级程序设计之基本引用类型
Nov 17 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中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
基于滚动条位置判断的简单实例
2017/12/14 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
wxPython的安装与使用教程
2018/08/31 Python
pycharm运行程序时在Python console窗口中运行的方法
2018/12/03 Python
python三方库之requests的快速上手
2019/03/04 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
荷兰鞋类购物网站:Donelli
2019/05/24 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
2014年父亲节活动方案
2014/03/06 职场文书
灰雀教学反思
2014/04/28 职场文书
法人任命书范本
2014/06/04 职场文书
公司承诺书格式范文
2015/04/28 职场文书
二胎满月酒致辞
2015/07/29 职场文书
PHP实现两种排课方式
2021/06/26 PHP