欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于window.close()不能关闭的问题解决

程序员文章站 2022-06-27 11:09:23
...

问题:我最近看一个视频做一个很简单的贪吃蛇小游戏,我增加一些用户体验辅助功能,但是我发现我使用window,close()时,不起作用,并且查看控制台时发现有“Scripts may close only the windows that were opened by it.”警告,明白window,close()在老的ie浏览器起作用,在谷歌和搜狐浏览器都不起作用,很多人都避免使用它。于是我找了很多解决方法,最后每一种方法效果不一样,先总结如下:

解决方法一:针对chrome浏览器,可以在编写如下代码,使之生效:(借鉴其他大佬的,我没用谷歌浏览器试,感觉可以,用2345浏览器试了这个代码,老是报错,然后不起作用)。

window.open("about:blank","_self").close()   

   或者

   window.open("","_self").close()  

解决方法二:针对firefox:(借鉴其他大佬的,没用这个浏览器试过,也没试,不知道能不能行)

   firefox配置:地址栏输入about:config,修改属性“dom.allow_scripts_to_close_windows”为true;

解决方法三:使用以下代码函数退出(这段代码我最初试的时候,发现不行,原因:我由另外一个网页点击按钮链接到这个界面的,这个时候,这代代码好像无法启到退出的作用。当我单独运行那个退出网页,然后点击“退出”按钮时,可以实现退出作用,该代码还有个优势就是有提示,对用户体验好 )。

function Close(){
        if(confirm("确定要退出吗?")){
                 var browsername=navigator.appName;
                 if (browsername=="Netscape"){
                       window.open('', '_self', '');
                       window.close();
                 }
                 if (browsername=="Microsoft Internet Explorer") { 
                       window.parent.opener = "whocares"; 
                       window.parent.close(); 
                 }
        }
}

解决方案四:以下代码也可以实现,但是缺点和上面代码一样,经过网页挑战还是不起作用,无法理解请自己试一下。

function Close() {
   try {
       window.opener = window;
       var w = window.open("","_self");
       w.close();
       //frame的时候
       top.close();
   } catch (e) {

   }
}

解决方法五:借鉴大佬的代码...以下代码可以解决上面2种方法的缺点,不过我试的时候,发现退出的界面是空白页,并不是真正的关闭。目前对于我那个项目,这个方法稍微好一点。

function Close(){
    if (navigator.userAgent.indexOf("Firefox") != -1 || navigator.userAgent.indexOf("Chrome") !=-1) {
        window.location.href="about:blank";
        window.close();
    } else {
        window.opener = null;
        window.open("", "_self");
        window.close();
    }
}

注意:以上方法我测试时,没用很多浏览器测试过,所以不能确保一定有用。emmm以后还是尽量避免这种现象出现,其实还有一种解决思路,就是设置一个函数,将关闭按钮跳转到该网站主页中,嘿嘿,不写了,不过我觉得可行。

相关标签: js close问题