zoukankan      html  css  js  c++  java
  • 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();

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

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

  • 相关阅读:
    组件中的data为什么不是一个对象而是一个函数?
    v-if v-show 的区别 以及使用的场景
    前后端数据交互的方式有哪些?
    服务端渲染客户端渲染的区别
    按下www.baidu.com发生什么
    php-语言参考-类型3.2-未完待续
    php-安装与配置-未完待续2
    PHP-入门指引1
    php扩展开发-INI配置
    php扩展开发-全局变量
  • 原文地址:https://www.cnblogs.com/yanggb/p/11120847.html
Copyright © 2011-2022 走看看