如何关闭浏览器窗口而又没有收到“您要关闭此窗口”提示?


86

如何关闭浏览器窗口而不接收到“是否要关闭此窗口”提示?

使用该window.close();功能时出现提示。


22
最简单的:window.open('','_self').close()
markasoftware

在Firefox中,如果您禁用窗口关闭功能,那么所有这些都无济于事。kb.mozillazine.org/…–
Brian

3
除非您自己拥有窗户,否则不应该。
罗伯特·哈维

Answers:


85
window.open('', '_self', ''); window.close();

这对我有用。


适用于IE11,Safary 5.1.7,但不适用于FF和Chrome。
nikolai.serdiuk

在Firefox 38.0.5和Chrome 43中工作
justanotherprogrammer

如果使用打开窗口showModalDialog怎么办?它不工作在IE10
bjan

不知道这是否适用于所有浏览器,但它确实适用于IE11 !!!当前,我们必须为其构建哪种浏览器。谢谢您的回答,为您省去了很多麻烦。
CrazyPaste

能正常工作在IE 11,铬76.0.3809,火狐69.0
拉胡Mahadik

57

我的朋友……有一种方法,但是“ hack”并没有开始描述它。您必须基本上利用IE 6和7中的错误。

每次都能工作!

无需调用window.close(),而是重定向到另一个页面。

开启页面:

alert("No whammies!");
window.open("closer.htm", '_self');

重定向到另一个页面。IE使您无法关闭此页面上的浏览器。

关闭页面:

<script type="text/javascript">
    window.close();
</script>

很棒吗?


1
我知道已经两年了。但这是令人惊讶的。.在IE 8和Firefox 15上工作
Susie

9
看来Microsoft已修复IE10中的此错误。有人知道我们仍然可以在IE10中实现吗?
Abhi Rampal 2013年

我这边的self.close()和window.close()都不适用于IE。然而,铬,FF和Safari都很好
NONAME

57

不允许脚本关闭用户打开的窗口。这被认为是安全风险。尽管没有任何标准,但是所有浏览器供应商都遵循此标准(Mozilla docs)。如果这在某些浏览器中发生,则是(非常理想的)非常快速地修复补丁程序的安全漏洞。

该问题答案中的所有hacks都不再起作用,并且如果有人提出另一个肮脏的hacks,最终它将也停止工作。

我建议您不要为此浪费精力,而应采用浏览器如此有用的方法-在您看上去使其页面崩溃之前先询问用户。


5
或者,甚至更简单:根本不关闭窗口。完成后,将用户带回到您的主页或其他某种中央位置。
duskwuff -inactive-

2
@duskwuff,我们正在针对这些浏览器运行自动化测试。他们需要关闭
ouflak

2
@ouflak当然,您的测试框架可以通过某种方式来操纵窗口。
duskwuff -inactive

1
@duskwuff那些将窗口留在身边的第三方库呢?您肯定不能建议我只为用户留一团糟,或将他们重定向到主页的(重复的)视图。
被遗弃的购物车

1
您能否在答案中以脚注的形式解释其安全隐患。
T.Todua

31

这是我用来关闭浏览器而没有提示或警告的Javascript函数,也可以从Flash中调用它。它应该在html文件中。

    function closeWindows() {
         var browserName = navigator.appName;
         var browserVer = parseInt(navigator.appVersion);
         //alert(browserName + " : "+browserVer);

         //document.getElementById("flashContent").innerHTML = "<br>&nbsp;<font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";

         if(browserName == "Microsoft Internet Explorer"){
             var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;  
             if (ie7)
             {  
               //This method is required to close a window without any prompt for IE7 & greater versions.
               window.open('','_parent','');
               window.close();
             }
            else
             {
               //This method is required to close a window without any prompt for IE6
               this.focus();
               self.opener = this;
               self.close();
             }
        }else{  
            //For NON-IE Browsers except Firefox which doesnt support Auto Close
            try{
                this.focus();
                self.opener = this;
                self.close();
            }
            catch(e){

            }

            try{
                window.open('','_self','');
                window.close();
            }
            catch(e){

            }
        }
    }

在IE 10.0.9200上,使用打开窗口showModalDialog。在上closeWindows,当上一个窗口仍处于打开状态时,它将打开一个新窗口(相同页面)。
2016年

IE / Edge不能在Firefox上运行,但会显示一个确认提示-尽管它可以在Chrome上运行。
Dymas

12

这在Chrome 26,Internet Explorer 9和Safari 5.1.7中有效(使用帮助页面,由ala Nick解答):

<script type="text/javascript">
    window.open('javascript:window.open("", "_self", "");window.close();', '_self');
</script>

嵌套window.open是使IE不显示“您要关闭此窗口”提示。

不幸的是,不可能让Firefox关闭窗口。


也为IE 10工作。
Mukus '18

11

在正文标签中:

<body onload="window.open('', '_self', '');">

要关闭窗口:

<a href="javascript:window.close();">

在Safari 4.0.5,用于Mac 3.6的FF,IE 8.0和用于Windows 3.5的FF上测试


尼克在功能上是一样的。
naugtur 2010年

是。如果我正确阅读了Nick的文章,他建议在调用window.close之前进行重定向。我发布的是如果您不想使用重定向。如果我误读了尼克的道歉信。
JimB 2010年

7

出于安全原因,仅当JavaScript打开了窗口时,才能在JavaScript中关闭该窗口。为了关闭该窗口,您必须打开一个新窗口_self作为目标,它将覆盖您当前的窗口,然后关闭该窗口(您可以执行此操作,因为它是通过JavaScript打开的)。

window.open('', '_self', '');
window.close();

这对我来说适合Silverlight:HtmlPage.Window.Eval(“ window.open(”,'_self',''); window.close();“);
Mike Fuchs

6

这里

<a href="javascript:window.opener='x';window.close();">Close</a>

您需要设置window.opener一些东西,否则会抱怨。


在Chrome,FF和IE 10,对我的作品,近7年后的今天
麦克Devenney

6

window.open('', '_self', '').close();

抱歉,在这里晚了一点,但是我找到了解决方案,至少就我而言。在Safari 11.0.3和Google Chrome 64.0.3282.167上测试


5

由于IE中的安全性增强,除非通过脚本打开窗口,否则无法关闭窗口。因此,解决方法是让浏览器认为使用脚本打开了该页面,然后关闭了窗口。下面是实现。

试试这个,它就像一个魅力!
javascript关闭当前窗口而不提示IE

<script type="text/javascript">
function closeWP() {
 var Browser = navigator.appName;
 var indexB = Browser.indexOf('Explorer');

 if (indexB > 0) {
    var indexV = navigator.userAgent.indexOf('MSIE') + 5;
    var Version = navigator.userAgent.substring(indexV, indexV + 1);

    if (Version >= 7) {
        window.open('', '_self', '');
        window.close();
    }
    else if (Version == 6) {
        window.opener = null;
        window.close();
    }
    else {
        window.opener = '';
        window.close();
    }

 }
else {
    window.close();
 }
}
</script>

javascript关闭当前窗口而不提示IE


2

创建一个JavaScript函数

<script type="text/javascript">
    function closeme() {
        window.open('', '_self', '');
        window.close();
    }
</script>

现在编写此代码并调用上面的JavaScript函数

<a href="Help.aspx" target="_blank" onclick="closeme();">Help</a>

或者简单地:

<a href="" onclick="closeme();">close</a>

2

这将起作用:

<script type="text/javascript">
function closeWindowNoPrompt()
{
window.open('', '_parent', '');
window.close();
}
</script>

使用Python Eel的Chrome实施工作。
revliscano


0

浏览器在抱怨,因为您正在使用JavaScript关闭未使用JavaScript打开的窗口,即window.open('foo.html');


0

我发现的最佳解决方案是:

this.focus();
self.opener=this;
self.close();

0

将以下代码放在ASPX中。

<script language=javascript>
function CloseWindow() 
{
    window.open('', '_self', '');
    window.close();
}
</script>

将以下代码放在按钮单击事件后面的代码中。

string myclosescript = "<script language='javascript' type='text/javascript'>CloseWindow();</script>";

Page.ClientScript.RegisterStartupScript(GetType(), "myclosescript", myclosescript);

如果在关闭之前没有任何处理,则可以将以下代码直接放在按钮click标签中的ASPX中。

OnClientClick="CloseWindow();"

希望这可以帮助。


这些问题要求一个简单的javascript解决方案,避免使用ASPX。
Zeeshan 2015年

@Zeeshan:任何值得投入的开发人员都可以看到Kamleshkumar Gujarathi帖子顶部的JavaScript可以应用于他们自己的需求。如果您不满意他的回答,那会有些刺耳。
保罗

0

在我的情况下,以下代码嵌入到php文件中。

var PreventExitPop = true;
function ExitPop() {
  if (PreventExitPop != false) {
    return "Hold your horses! \n\nTake the time to reserve your place.Registrations might become paid or closed completely to newcomers!"
  }
}
window.onbeforeunload = ExitPop;

所以我打开控制台并编写以下内容

PreventExitPop = false

这样就解决了问题。因此,找出JavaScript代码并找到变量,然后将其分配给适当的“值”,在我的情况下为“ false”


-3

我将发布此消息,因为这是我当前在网站上使用的内容,它在Google Chrome和IE 10中均可以正常运行,而不会收到任何弹出消息:

<html>
    <head>
    </head>
    <body onload="window.close();">
    </body>
</html>

我的网站上有一个函数,我想运行该函数以将开/关变量保存到会话中,而无需直接进入新页面,因此我只打开了一个很小的弹出式网页。该网页随后会立即使用该onload="window.close();"功能关闭。


是的:但是像stackoverflow.com/a/24854246/2239406信息:您可以使用javascript打开windo,然后可以使用javascript关闭。
Denis Chenu

好吧,如果它不起作用,并且已经被“修补”,它仍然可以在我的PC上的所有浏览器上正常运行。我只是提供一个目前对我有用的解决方案。
Logan Hasbrouck

区别在于:您在JS中打开窗口。如果窗口未在JS中打开:则不起作用。
Denis Chenu

不,我没有使用JS打开窗口;相反,我使用awithtarget=_blank来在特定的URL打开一个小的弹出窗口,然后最后我使用JS关闭该窗口。目的是特定的url将一个值保存到会话中以禁用背景图像,尽管一旦我弄清楚如何做ajax,我将在这里尽快删除它,以支持ajax。(仍在学习技巧)
Logan Hasbrouck
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.