【问题标题】:How to close current tab in a browser window?如何在浏览器窗口中关闭当前选项卡?
【发布时间】:2026-02-24 00:10:01
【问题描述】:

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

怎么做?有什么建议吗?

【问题讨论】:

  • 我可能会迟到,但浏览器会阻止这是有原因的。

    想想你自己试图一次又一次地关闭一个窗口,但它并没有因为它在执行“ 如果没有”部分来自您的问题,即“什么也不做”。

    这肯定会很烦人!
  • 不可能。读这个。 *.com/a/19768082/4671932
  • 对于任何试图以编程方式关闭选项卡的人,我有两件事要添加 (TL:DR;) 1 您只能关闭使用 javascript 打开的选项卡(如 Ryan Joy 所述)。 2,此处未提及:只有当window.top.opener(“父”窗口)不为空时,您才能关闭选项卡
  • windows.close() 不能在角度工作。它给了我脚本可能只关闭它们打开的窗口。警告。

标签: javascript html hyperlink


【解决方案1】:

您将需要 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会要求用户确认。其他浏览器可能会有所不同。

【讨论】:

  • 您无法通过 JavaScript 关闭任何选项卡。 “这个方法只允许被脚本使用 window.open 方法打开的窗口调用。”换句话说,您只能使用 JavaScript 关闭通过 JavaScript 生成的窗口/选项卡。
  • -1 chrome 30 PC 无法工作其他答案显示在当前选项卡中打开一个窗口然后关闭它工作
  • In about:config dom.allow_scripts_to_close_windows = true 可能是 Firefox 中的解决方案(可能存在很大的安全风险!)
  • 浏览器不允许这种行为。 Javascript 只能关闭它打开的标签。
  • 这在 Chrome 62 中(至少)有效:&lt;button type="button" onclick="window.open('', '_self', ''); window.close();"&gt;Discard&lt;/button&gt;See also this article
【解决方案2】:

试试这个

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

【讨论】:

  • 在 Firefox 31.0 中工作
  • 这个解决方案的不好的一面是get请求被发送到服务器。但另一方面,我还没有找到任何其他解决方案。
  • 从 Chrome 控制台输出“脚本可能只关闭它打开的窗口”
  • 在 chrome 60.0.3079.0 中不工作:“脚本只能关闭它打开的窗口。”
【解决方案3】:

此方法适用于 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>

【讨论】:

  • 更简单:open(location, '_self').close();
  • 这在 IE 11 中运行良好,但在 Chrome 38 中不起作用
【解决方案4】:

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

【讨论】:

  • 这在 Chrome 62 中(至少)有效:&lt;button type="button" onclick="window.open('', '_self', ''); window.close();"&gt;Discard&lt;/button&gt;See also this article
  • @hering 好吧,这篇文章是 2006 年的,但如果你发现了一些有用的东西,那是个好消息,也许会对读到这里的人有所帮助。感谢分享。
  • 问题是关于从该选项卡中关闭当前活动选项卡。正如您所说,这在 Chrome 或 Firefox 中是不可能的。这应该是公认的答案。
【解决方案5】:

很抱歉发布此消息,但我最近实现了一个本地托管的站点,该站点需要能够关闭当前浏览器选项卡,并发现了一些有趣的解决方法,这些解决方法在我能找到的任何地方都没有很好的记录,所以我自己去做了.

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



上下文:

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

当前功能:

window.close() 将作用于由脚本打开的标签页,target="_blank" 的锚点打开(在新标签页中打开)

查看@killstreet 对@calios 回答的评论


浏览器特定的解决方法:

谷歌浏览器:

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

例如,我的脚本(当单击 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 有一个高级设置,您可以启用它以允许脚本关闭窗口,从而有效地启用window.close() 方法。要启用此设置,请转到 about:config,然后搜索并找到 dom.allow_scripts_to_close_windows 首选项并将其从 false 切换为 true。

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

例如,此脚本在将首选项设置为 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() 脚本运行时,一个额外的弹出窗口会提醒您该页面正在尝试关闭当前选项卡并询问您是否要继续。

编辑: 这是在旧版本的 Edge 上,不是基于铬的。我还没有测试过,但想象一下它会在基于铬的版本上与 Chrome 类似


最后说明: Chrome 和 Firefox 的解决方案是针对浏览器故意禁用的某些问题的解决方法,可能是出于安全原因。它们还都要求用户事先将其浏览器配置为兼容,因此对于供公众使用的网站可能不可行,但对于像我这样的本地托管解决方案来说却是理想的选择。

希望这有帮助! :)

【讨论】:

    【解决方案6】:

    这是可能的。这个问题我找遍了整个网络,但是当我参加了一次微软的调查时,我终于得到了答案。

    试试这个:

    window.top.close();
    

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

    【讨论】:

    • "脚本只能关闭它打开的窗口。"在 Chrome 50 上。
    【解决方案7】:

    也试试这个。在所有三个主要浏览器上为我工作。

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

    【讨论】:

    • 这里的很多其他技术对我都不起作用,这确实有效,我正在使用谷歌浏览器Version 88.0.4324.182 (Official Build) (64-bit)
    • 无法在 chrome 96 中工作
    【解决方案8】:

    以下内容在 Chrome 41 中适用于我:

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

    我尝试了几个关于 FF 的想法,包括打开一个实际的网页,但似乎没有任何效果。据我了解,如果 真的 由 JS 打开,任何浏览器都会使用 xxx.close() 关闭选项卡或窗口,但至少 FF 不能通过打开来关闭选项卡该选项卡内的新内容。

    仔细想想,这是有道理的——用户可能不希望 JS 关闭具有有用历史记录的选项卡或窗口。

    【讨论】:

    • Chrome: 'Uncaught TypeError: Cannot set property 'innerHTML' of null'
    【解决方案9】:

    在 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 上不工作“脚本可能只关闭它打开的窗口。”
    【解决方案10】:

    对于仍在访问此页面的人,您只能关闭由脚本打开的选项卡或使用带有目标_blank 的HTML 的锚标记。这两个都可以使用

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

    【讨论】:

    • 这适用于所有现代浏览器。 IE11 和 Edge 17 显示确认警报,但它仍然有效。
    • 我很难让 Angular 应用真正从 Adfs 中注销。想知道关闭标签是否是最终退出的方式。那我试试这个sn-p。
    【解决方案11】:
    <button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>
    

    这对我有用

    【讨论】:

    • 在我们的 React 项目中不起作用,可能是因为我们使用的是 jsx 而不是普通的 html 和 javascript。我们得到与其他人相同的错误:脚本可能只关闭它们打开的窗口。
    • 我发现在 Chrome 中,当未通过将 URL 粘贴到浏览器栏中首次打开选项卡时,它适用于本地文件(至少)。所以,它必须通过双击打开,从 VSCode 或其他任何东西,但出现黄色警告,只有当我通过 Ctrl-T 打开一个新选项卡并粘贴 URL 时它才起作用。
    【解决方案12】:

    window.close() 在 2k21 中不起作用,因为Scripts may close only the windows that were opened by them.

    但是如果不是手动在浏览器中打开选项卡,而是自动打开 - 那么window.close() 有效。

    自动(当close() 工作时):

    • &lt;a href="/close" target="_blank"&gt; 浏览器将在新选项卡中打开地址,此选项卡可以用close() 关闭
    • 当从另一个应用程序打开新的浏览器选项卡时(当您单击 Telegram/Whatsup/Outlook 等中的链接时)- 操作系统将打开新选项卡,并且可以使用 close() 关闭它
    • 当你用 window.open('ya.ru') 打开时 - 肯定可以用close() 关闭它

    手动(当它不起作用时):

    • 当您打开新浏览器并输入地址时。
    • 当您点击 (+) 打开新标签并输入地址时

    【讨论】:

      【解决方案13】:

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

      window.close() 仅在您尝试使用close() 的窗口由使用 window.open() 方法的脚本打开时才有效(IE 除外)。

      !(请看下面@killstreet关于目标为_blank的锚标签的评论)

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

      你会得到控制台错误: 脚本可能不会关闭不是由脚本打开的窗口。 作为一个错误,仅此而已。

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

      我找不到任何方法来知道页面是否是从 open() 打开的, 并且 close 不会抛出错误。 这不会打印“测试”:

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

      你可以阅读in MDN more about the close() function

      【讨论】:

      • 不仅是脚本打开的标签页,还允许关闭目标为_blank的锚标签。到目前为止,在 chrome 和 firefox 中进行了测试,两者似乎都允许关闭已由锚标记打开的选项卡。
      【解决方案14】:

      保证在未来的任何浏览器中都不会允许关闭选项卡。使用上面提到的脚本是行不通的。

      我的解决方案是使用 Chrome 扩展程序。 Chrome 扩展程序可能需要选项卡操作权限,因此可以轻松处理在扩展程序内容脚本处于活动状态的域中关闭任何选项卡。

      后台脚本应该是这样的:

      chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
          console.log(sender)
          console.log(message)
          if(message.closeThis) {
              closeTab(sender.tab.id)
          }
      });
      
      const closeTab = id => {
          console.log("Closing tab");
          chrome.tabs.remove(id);
      }
      

      内容脚本应如下所示:

      window.addEventListener("message", (event) => {
          // Only accept messages from ourselves
          if (event.source !== window)
              return;
      
          if (event.data.type && (event.data.type === "APPLICATION/CLOSE")) {
              console.log("Content script received APPLICATION/CLOSE event");
              chrome.runtime.sendMessage({closeThis: true});
          }
      }, false);
      

      通过在您的应用程序中调用它来关闭选项卡(通过在清单中指定来确保在您的域中启用内容脚本):

      window.postMessage({ type: "APPLICATION/CLOSE" }, "*");
      

      使用它时要小心,因为 Chrome 扩展程序的部署可能会很痛苦。

      【讨论】:

      • 这是 chrome 唯一可靠的选择
      【解决方案15】:

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

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

      将以下行添加到 HTML 以使用 &lt;button&gt; 调用函数

      <button name='closeIt' onClick="Exit()" >Click to exit </Button>
      

      【讨论】:

        【解决方案16】:

        您可以尝试这个解决方案来欺骗浏览器使用 JavaScript + HTML 关闭当前窗口:

        JS:

        function closeWindow() {
         if(window.confirm('Are you sure?')) {
          window.alert('Closing window')
          window.open('', '_self')
          window.close()
         }
         else {
          alert('Cancelled!')
         }
        }
        

        HTML:

        Some content
        <button onclick='closeWindow()'>Close Current Window!</button>
        More content
        

        【讨论】:

        • 这太复杂了——就所使用的 JS 而言,而且还不必要地将 HTML 混入其中。
        【解决方案17】:

        我只是想补充一点,window.close() 在 2021 年有效,chrome 91,但并非总是如此。 如果标签中没有历史记录(您无法返回),则其中一种情况。

        在我的情况下,我想创建几秒钟后关闭的自毁选项卡,但我一直在努力避免使用新选项卡进入开发服务器,因为显然新选项卡也是选项卡并且它被保存在选项卡历史记录中:DI 在 about:blank 选项卡中创建了带有target=_blank 属性的链接,它导致了 window.close() 方法终于起作用的新选项卡!

        【讨论】:

          【解决方案18】:

          创建此类链接的方法如下:

          &lt;a href="javascript:if(confirm('Close window?'))window.close()"&gt;close&lt;/a&gt;

          【讨论】:

            【解决方案19】:

            您可以使用window.close() 关闭浏览器标签。

            【讨论】: