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();
这样就可以实现关闭弹出窗体的效果。
"你要对得起你所有经受过的苦。"