【问题标题】:How can I close a browser window without receiving the "Do you want to close this window" prompt?如何在没有收到“您要关闭此窗口”提示的情况下关闭浏览器窗口?
【发布时间】:2010-09-08 15:24:23
【问题描述】:

如何在没有收到您要关闭此窗口提示的情况下关闭浏览器窗口?

当我使用window.close();函数时出现提示。

【问题讨论】:

标签: javascript browser


【解决方案1】:
window.open('', '_self', ''); window.close();

这对我有用。

【讨论】:

  • 适用于 IE11、Safary 5.1.7,但不适用于 FF 和 Chrome。
  • 在 Firefox 38.0.5 和 Chrome 43 中工作
  • 如果使用showModalDialog打开窗口会怎样?它不适用于 IE10
  • 不确定这是否适用于所有浏览器,但它确实适用于 I.E.11!目前,我们必须为其构建浏览器。谢谢你的回答,为我省去了很多麻烦。
  • 在 IE 11、Chrome 76.0.3809、Firefox 69.0 中运行良好
【解决方案2】:

脚本不允许关闭用户打开的窗口。这被认为是安全风险。虽然它没有任何标准,但所有浏览器供应商都遵循这一点 (Mozilla docs)。如果在某些浏览器中发生这种情况,这是一个安全漏洞,(理想情况下)会很快得到修补。

这个问题的答案中的任何技巧都不再有效,如果有人想出另一个肮脏的技巧,最终它也会停止工作。

我建议您不要为此浪费精力,而是采用浏览器为您提供的非常有用的方法 - 在您看似崩溃页面之前询问用户。

【讨论】:

  • 或者,更简单:根本不要关闭窗口。如果您完成了,请将用户发送回您的主页或其他某种中心位置。
  • @duskwuff,我们正在针对这些浏览器运行自动化测试。他们需要关闭
  • @ouflak 你的测试框架肯定有一些方法来操作窗口。
  • @duskwuff 那些让 Windows 闲置的第三方库呢?您当然不能建议我只是将这些混乱留给用户或将他们重定向到主页的(重复)视图。
  • 您能否在您的回答中作为脚注解释一下为什么会存在安全风险。
【解决方案3】:

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

每次都有效!

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

打开页面:

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

重定向到另一个页面。这会欺骗 IE,让您关闭此页面上的浏览器。

关闭页面:

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

厉害吧?!

【讨论】:

  • 我知道已经 2 年了。但这太棒了..适用于 IE 8 和 firefox 15
  • 看起来微软已经在 IE10 中修复了这个错误。有人知道我们如何在 IE10 中实现这一目标吗?
  • self.close() 和 window.close() 都不适用于我这边的 IE。但是,Chrome、FF 和 Safari 都很好
【解决方案4】:

这是我用来关闭浏览器而不提示或警告的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 上,它会打开一个新窗口(同一页面),而前一个窗口仍处于打开状态。
  • 无法在 Firefox 上运行,IE/Edge 显示确认提示 - 但它在 Chrome 上运行。
【解决方案5】:

这适用于 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。
【解决方案6】:

在正文标签中:

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

关闭窗口:

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

在 Safari 4.0.5、FF for Mac 3.6、IE 8.0 和 FF for Windows 3.5 上测试

【讨论】:

  • 这在功能上与尼克所做的相同。
  • 是的。如果我正确地阅读了尼克的帖子,他建议在调用 window.close 之前进行重定向。我发布的是如果您不想使用重定向。如果我误读了尼克的帖子道歉。
【解决方案7】:

出于安全原因,只有在 JavaScript 中打开的窗口才能在 JavaScript 中关闭。要关闭窗口,您必须打开一个以_self 为目标的新窗口,这将覆盖您当前的窗口,然后关闭该窗口(您可以这样做,因为它是通过 JavaScript 打开的)。

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

【讨论】:

  • 这对我有用 Silverlight:HtmlPage.Window.Eval("window.open('', '_self', ''); window.close();");
【解决方案8】:

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

抱歉,这里有点晚了,但我找到了解决方案,至少对于我来说是这样。在 Safari 11.0.3 和 Google Chrome 64.0.3282.167 上测试

【讨论】:

  • 如果配置选项 dom:allow_scripts_to_close_windows 设置为 true(默认为 false),也适用于 Firefox 版本 88。
【解决方案9】:

来自here

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

您需要将window.opener 设置为某个值,否则它会报错。

【讨论】:

  • 近 7 年后在 Chrome、FF 和 IE 10 中为我工作。
【解决方案10】:

由于 IE 中的安全增强功能,您无法关闭窗口,除非它是由脚本打开的。所以解决这个问题的方法是让浏览器认为这个页面是使用脚本打开的,然后关闭窗口。下面是实现。

试试这个,它就像一个魅力!
javascript close current window without prompt 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 close current window without prompt IE

【讨论】:

    【解决方案11】:
    window.opener=window;
    window.close();
    

    【讨论】:

      【解决方案12】:

      创建一个 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>
      

      【讨论】:

        【解决方案13】:

        这将起作用:

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

        【讨论】:

        • 使用 Python Eel 的 Chrome 实现工作。
        【解决方案14】:

        在我的情况下,以下代码被嵌入到一个 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 代码并找到变量并将它们分配给适当的“值”,在我的例子中是“假”

        【讨论】:

          【解决方案15】:

          浏览器报错是因为您使用 JavaScript 关闭了一个不是用 JavaScript 打开的窗口,即window.open('foo.html');

          【讨论】:

            【解决方案16】:

            将以下代码放在 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);
            

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

            OnClientClick="CloseWindow();"
            

            希望这会有所帮助。

            【讨论】:

            • 问题要求一个简单的 javascript 解决方案,避免使用 ASPX。
            • @Zeeshan:任何称职的开发人员都可以看到,Kamleshkumar Gujarathi 帖子顶部的 JavaScript 可以应用于他们自己的需求。如果你对他的回答投了反对票,那就有点苛刻了。
            【解决方案17】:

            我找到的最佳解决方案是:

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

            【讨论】:

              【解决方案18】:

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

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

              我的网站上有一个函数,我想运行它来将开/关变量保存到会话,而不直接进入新页面,所以我只打开一个小弹出网页。然后该网页会立即使用onload="window.close();" 功能自行关闭。

              【讨论】:

              • 是的:但是像stackoverflow.com/a/24854246/2239406信息:你用javascript打开windo,然后可以用javascript关闭。
              • 好吧,如果它不应该工作,并且如果它已被“修补”,它仍然可以在我电脑上的所有浏览器上正常工作。我只是提供了一个目前对我有用的解决方案。
              • 不同的是:你用JS打开窗口。如果窗口 si 没有在 JS 中打开:不工作。
              • 不,我不是用JS打开窗口;相反,我使用atarget=_blank 在特定网址打开一个小弹出窗口,最后我使用JS 关闭窗口。其目的是特定的 url 将一个值保存到会话中以禁用背景图像,尽管很快我将在我弄清楚如何执行 ajax 后将其删除以支持 ajax。 (仍在学习绳索)
              猜你喜欢
              • 1970-01-01
              • 2011-06-25
              • 2018-06-09
              • 2012-07-21
              • 2014-10-14
              • 1970-01-01
              • 2013-01-08
              • 2021-04-17
              • 2017-01-16
              相关资源
              最近更新 更多