Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 469|回复: 0

javascript的window.close()在chrome和firefox下失效的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-6-6 10:50
  • 签到天数: 750 天

    [LV.10]以坛为家III

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    706216
    发表于 2021-7-15 09:47:52 | 显示全部楼层 |阅读模式

    JavaScript原生提供了一个window.close()方法,一看就知道是用来关闭浏览器窗口的方法。

    W3CSchool对该方法的解释如下:

    1.执行close()方法将关闭有window指定的顶层浏览器窗口。

    2.某个窗口可以通过调用self.close()方法或只调用close()方法来关闭其自身。

    3.只有通过JavaScript代码打开的窗口才能够由JavaScript代码关闭,这是为了阻止了恶意的脚本终止用户的浏览器。

    在IE浏览器中,window.close()能生效,但是在生效的时候,会弹出包含警告信息的提示框,询问你是否关闭该窗口。

    但是在Chrome浏览器或Firefox浏览器下则这个方法完全不会生效,如果你打了断点进行调试,就会发现这个方法是能运行通过的,也会照常执行,不会报错,只是没有执行的效果。

    针对chrome浏览器,可以将代码做以下修改。

    window.open('', '_self', '');
    window.close();

    先通过window.open()在本窗口打开一个页面,然后再通过window.close()方法关闭。

    这应验了这句话:只有通过JavaScript代码打开的窗口才能够由JavaScript代码关闭。

    这段代码对IE浏览器和Chrome浏览器都是有效的,但是在Firefox浏览器下面无效。需要对Firefox浏览器进行如下操作:

    1.在Firefox地址栏里输入about:config。

    2.在配置列表中找到dom.allow_scripts_to_close_windows。

    3.点右键的选切换把上面的false修改为true即可(默认是false,目的是为了防止脚本乱关窗口)。 

    FireFox浏览器中做了如此设置以后,就可以直接使用window.close()关闭窗口。

    当然了,为了三个浏览器的兼容性,还是写上面的兼容代码比较好。

    事实上,现在各种框架早就摒弃了window.open这种方式,或做好了兼容性处理。

    为什么今天记录这个问题,是因为我最近在维护一个有13年历史的老项目的代码,不仅维护还要往里面加新功能,好惨一开发。

    -------------------------------------20200220更新---------------------------------------

    今天再次尝试这一方法,发现在新版的谷歌下这个方法已经不行了,需要找到新的解决方案。

    通过警告信息【Scripts may close only the windows that were opened by it.】可以得出一点,就是要关闭弹出的窗体,必须要是打开弹出窗体的窗体,因此我们可以弹出窗体的时候给父窗体生成变量,弹出的子窗体去使用父窗体的这个变量去关闭自己即可。

    父窗体的代码:

    yanggbDialog = window.open();

    子窗体的代码(弹出窗体):

    window.opener.yanggbDialog.close();

    这样就可以实现关闭弹出窗体的效果。

     

    "你要对得起你所有经受过的苦。"

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-17 04:20 , Processed in 0.064171 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表