如何关闭浏览器窗口中的当前选项卡?


434

我想在网页上创建一个链接,该链接将关闭浏览器中当前活动的选项卡,而不关闭浏览器中的其他选项卡。
当用户单击关闭链接时,将出现一条警告消息,要求用户使用两个按钮“是”和“否”进行确认。如果用户单击“是”,则关闭该页面,如果“否”,则不执行任何操作。

怎么做到呢?有什么建议么?


我可能会晚点这里,但这是由浏览器的一个原因阻止。搜索结果,觉得自己的努力一次又一次关闭一个窗口,它不是关闭其做“ 如果没有 ”的一部分,从你的问题,其是“什么都不做”。<br> <br>这肯定会令人讨厌!
穆罕默德·奥萨马

Answers:


502

您将需要Javascript来执行此操作。用途window.close()

close();

注意:隐含当前选项卡。这等效于:

window.close();

或者您可以指定其他窗口。

所以:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

使用HTML:

<a href="javascript:close_window();">close</a>

要么:

<a href="#" onclick="close_window();return false;">close</a>

return false在这里防止事件的默认行为。否则,浏览器将尝试转到该URL(显然不是)。

现在,window.confirm()对话框上的选项将为“确定”和“取消”(不是“是”和“否”)。如果您确实想要“是”和“否”,则需要创建某种模式的Javascript对话框。

注意:上述内容与浏览器特定。如果您使用Javascript(通过window.open())打开了窗口,则可以使用JavaScript关闭该窗口。Firefox不允许您关闭其他窗口。我相信IE会要求用户确认。其他浏览器可能会有所不同。


386
您无法通过JavaScript关闭任何标签。“仅允许使用window.open方法由脚本打开的窗口调用此方法。” 换句话说,您只能使用JavaScript关闭通过JavaScript生成的窗口/标签。
Ryan Joy 2010年

7
-1在chrome 30 PC上不起作用其他答案显示在当前选项卡中打开一个窗口然后关闭它可以工作
markasoftware 2013年

2
about:config dom.allow_scripts_to_close_windows = true可能是在Firefox中的解决方案(可能是一个很大的安全隐患!)
Nepomuk的Frädrich

6
浏览器不允许这种行为。JavaScript只能关闭它打开的选项卡。
爱德华·肯尼迪

1
此功能(至少)在Chrome 62中有效:<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> 另请参见本文
hering

247

尝试这个

<a href="javascript:window.open('','_self').close();">close</a>

2
在Firefox 31.0中工作
Adrian Carr

1
该解决方案的缺点是将获取请求发送到服务器。但另一方面,我还没有找到其他解决方案。
2015年

18
从Chrome控制台执行此操作,“脚本可能仅关闭由它打开的窗口”
议会

不起作用 脚本只能关闭由它打开的窗口。
罗曼·洛舍夫

1
在chrome 60.0.3079.0中不起作用:“脚本只能关闭由它打开的窗口。”
Our_Benefactors

65

此方法适用于Chrome和IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>

56
更简单:open(location, '_self').close();
uınbɐɥs

这在IE 11中运作良好,但在Chrome 38中却无法使用
Yann Duran 2014年

31

据我所知,Chrome或FireFox不再支持。在IE中(至少在Edge之前)仍然可能。


2
此功能(至少)在Chrome 62中有效:<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> 另请参见本文
hering

@hering好,这篇文章来自2006年,但是如果您发现了行之有效的话,那将是个好消息,并且可能会帮助那些读了这么远的人们。感谢分享。
Guy Schalnat

问题是关于从该选项卡中关闭当前活动选项卡。如您所说,在Chrome或Firefox中是不可能的。这应该是公认的答案。
decates

14

有可能的。我在整个网络中搜索了此内容,但是当我参加了Microsoft的一项调查时,我终于找到了答案。

尝试这个:

window.top.close();

这将为您关闭当前选项卡。


12
“脚本只能关闭它打开的窗口。” 在Chrome 50
赫斯基

7

已在FF 18和Chrome 24中成功测试:

插入头部:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

版权归Marcos J. Drake所有


不支持Chrome浏览器“脚本可能只关闭由它打开的窗口。”
塞萨尔·莱昂

7

也尝试一下。在所有三种主要浏览器上为我工作。

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

在Firefox Quantum 68.0.1上不起作用
Zeke

7

以下内容适用于Chrome 41:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

我为FF尝试了几种想法,包括打开实际的网页,但似乎没有任何效果。据我了解,任何浏览器将关闭一个标签或窗口xxx.close()如果这是真的 JS打开了,但是至少FF无法欺骗通过在该选项卡中打开新内容来关闭该选项卡。

当您考虑时,这很有意义-用户可能不希望JS关闭具有有用历史记录的选项卡或窗口。


Chrome:“未捕获的TypeError:无法将属性'innerHTML'设置为null”
Francisco Corrales Morales

5

不好意思,但是我最近实现了一个本地托管的站点,该站点需要能够关闭当前浏览器选项卡,并且发现一些有趣的变通办法,这些地方在我找不到的任何地方都没有得到很好的记录,因此请我自己去做。

注意:这些变通办法是在考虑本地托管站点的情况下完成的,并且(Edge除外)要求专门配置浏览器,因此对于公共托管站点而言不是理想的选择。

上下文:过去,jQuery脚本window.close()能够关闭大多数浏览器上的当前选项卡而不会出现问题。但是,现代浏览器可能出于安全原因不再支持此脚本。

谷歌浏览器:

Chrome不允许运行window.close()脚本,如果尝试使用它,则不会发生任何事情。通过使用Chrome插件TamperMonkey,如果您将TamperMonkey的UserScript标头包含在内,我们可以使用window.close()方法。// @grant window.close

例如,我的脚本(当单击id ='close_page'的按钮并在浏览器弹出窗口上按下'yes'时触发)

// ==UserScript==
// @name         Close Tab Script
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Closes current tab when triggered
// @author       Mackey Johnstone
// @match        http://localhost/index.php
// @grant        window.close
// @require      http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    $("#close_page").click(function() {
        var confirm_result = confirm("Are you sure you want to quit?");
        if (confirm_result == true) {
            window.close();
        }
    });
})();

注意:此解决方案仅在不是最后一个打开的选项卡时才能关闭。如此有效,它无法关闭选项卡,如果它会由于最后一个选项卡打开而导致窗口关闭。

Firefox:

Firefox具有高级设置,您可以启用该设置以允许脚本关闭窗口,从而有效地启用该window.close()方法。要启用此设置,请转至about:config,然后搜索并找到dom.allow_scripts_to_close_windows首选项并将其从false切换为true。

这使您可以使用 window.close()其他脚本一样直接在jQuery文件中方法。

例如,此脚本在将首选项设置为true时可以完美运行:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

这比Chrome解决方法的效果要好得多,因为它允许用户关闭当前选项卡,即使它是唯一打开的选项卡,也不需要第三方插件。但是一个缺点是,它也使该脚本可以在不同的网站上运行(而不仅仅是您打算在其上使用的网站),因此有潜在的安全隐患,尽管我无法想象关闭当前选项卡特别危险。

边缘:

令人失望的是,Edge实际上在我尝试过的所有3种浏览器中都表现最佳,并且window.close()无需任何配置即可使用该方法。当window.close()脚本运行,额外的弹出提示您的网页正试图关闭当前标签,并询问是否要继续。

在此处输入图片说明

最后说明: Chrome和Firefox的解决方案都是针对浏览器有意禁用(可能出于安全原因)的解决方法。它们都还要求用户事先配置其浏览器以使其兼容,因此对于打算供公众使用的站点可能不可行,但对于像我的本地托管解决方案是理想的。

希望这对您有所帮助!:)


5

对于仍在访问此页面的人,只允许您关闭由脚本或通过将HTML的定位标记与目标_blank一起使用打开的选项卡。这两个都可以使用

<script>
    window.close();
</script>

这适用于所有现代浏览器。IE11和Edge 17显示确认警报,但它仍然有效。
Fabian von Ellerts

1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

这为我做了工作


1

有点晚了,但这就是我发现的...

window.close()仅当您尝试close()使用window.open()方法的脚本打开了您要尝试打开的窗口时,IE才起作用。

!(请参阅下面@killstreet关于目标_blank的锚标记的评论)

TLDR:chrome和firefox允许关闭它们。

您将收到控制台错误:脚本可能无法关闭脚本未打开的窗口。作为错误,仅此而已。

您可以在URL中添加一个唯一参数,以了解是否从脚本中打开了页面(例如时间)- 但它只是一个hack,而不是本机功能,在某些情况下会失败

我找不到任何方法可以知道该页面是否从open()打开,并且关闭不会引发错误。 这不会打印 “测试”:

try{
  window.close();
}
catch (e){
  console.log("text");
}

您可以在MDN中阅读更多有关close()函数的信息


2
不仅是脚本已打开的选项卡,还将允许关闭目标为_blank的锚标记。到目前为止,已在chrome和firefox中进行了测试,并且似乎都可以关闭由定位标记打开的标签页。
killstreet


-1

这是解决相同问题的一种方法,像这样声明一个JavaScript函数

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

将以下行添加到HTML中,以使用 <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
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.