Designed by 77
加载资源 ......
感谢 ♥ 作者
先不感谢了

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

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();

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

 

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

posted @ 2020-02-06 12:13  yanggb  阅读(3129)  评论(0编辑  收藏  举报