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

问题:我最近看一个视频做一个很简单的贪吃蛇小游戏,我增加一些用户体验辅助功能,但是我发现我使用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以后还是尽量避免这种现象出现,其实还有一种解决思路,就是设置一个函数,将关闭按钮跳转到该网站主页中,嘿嘿,不写了,不过我觉得可行。

发布了84 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sunandstarws/article/details/87897767