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 this 深入理解
Jul 30 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
JavaScript中的typeof操作符用法实例
Apr 05 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
jQuery检查事件是否触发的方法
Jun 26 Javascript
Jquery easyui 实现动态树
Nov 17 Javascript
Highcharts使用简例及异步动态读取数据
Dec 30 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
浅析jQuery操作select控件的取值和设值
Dec 07 Javascript
node.js 中间件express-session使用详解
May 20 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
Oct 14 Javascript
vue-router 起步步骤详解
Mar 26 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
第八节 访问方式 [8]
2006/10/09 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
php判断变量类型常用方法
2012/04/24 PHP
php生成随机数的三种方法
2014/09/10 PHP
php中动态调用函数的方法
2015/03/16 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
python BeautifulSoup设置页面编码的方法
2015/04/03 Python
python实现图像识别功能
2018/01/29 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python-接口开发入门解析
2019/08/01 Python
flask 使用 flask_apscheduler 做定时循环任务的实现
2019/12/10 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
PyQt QMainWindow的使用示例
2021/03/24 Python
对孩子的寄语
2014/04/09 职场文书
父母寄语大全
2014/04/12 职场文书
推荐信格式范文
2014/05/09 职场文书
知识就是力量演讲稿
2014/09/13 职场文书
物业工程部岗位职责
2015/02/11 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL