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

Nav*_*eed 408 html javascript hyperlink

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

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

cle*_*tus 468

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

close();
Run Code Online (Sandbox Code Playgroud)

注意:隐含当前选项卡.这相当于:

window.close();
Run Code Online (Sandbox Code Playgroud)

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

所以:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}
Run Code Online (Sandbox Code Playgroud)

使用HTML:

<a href="javascript:close_window();">close</a>
Run Code Online (Sandbox Code Playgroud)

要么:

<a href="#" onclick="close_window();return false;">close</a>
Run Code Online (Sandbox Code Playgroud)

return false在此处阻止事件的默认行为.否则,浏览器将尝试转到该URL(显然不是这样).

现在,window.confirm()对话框上的选项将为"确定"和"取消"(不是"是"和"否").如果你真的想要是和否,你需要创建某种模态Javascript对话框.

注意:与上述内容存在特定于浏览器的差异.如果您使用Javascript(via window.open())打开窗口,则可以使用javascript关闭窗口.Firefox不允许您关闭其他窗口.我相信IE会要求用户确认.其他浏览器可能不同.

  • 您无法通过JavaScript关闭任何标签."只允许对使用window.open方法由脚本打开的窗口调用此方法." 换句话说,您只能使用JavaScript来关闭通过JavaScript生成的窗口/选项卡. (349认同)
  • -1不起作用chrome 30 PC另一个答案显示在当前选项卡中打开一个窗口然后关闭它工作 (7认同)
  • 浏览器不允许此行为.Javascript只能关闭它打开的标签. (6认同)
  • 这两个HTML示例都不适用于PC上的Firefox 11 (5认同)
  • 在`about:config``dom.allow_scripts_to_close_windows = true`可能是Firefox中的解决方案(可能是一个很大的安全风险!) (2认同)
  • 这(至少)在 Chrome 62 中有效: `&lt;button type="button" onclick="window.open('', '_self', ''); window.close();"&gt;放弃&lt;/button&gt;` [另请参阅这篇文章](http://www.yournewdesigner.com/css-experiments/javascript-window-close-firefox.html) (2认同)

Dan*_*hen 242

试试这个

<a href="javascript:window.open('','_self').close();">close</a>
Run Code Online (Sandbox Code Playgroud)

  • 从Chrome控制台执行此操作会输出"脚本可能只关闭由它打开的窗口" (14认同)
  • 在Firefox 31.0中工作 (2认同)
  • 该解决方案的缺点是 get 请求被发送到服务器。但另一方面,我还没有找到任何其他解决方案。 (2认同)
  • 在 Chrome 60.0.3079.0 中不起作用:“脚本只能关闭它打开的窗口。” (2认同)
  • &lt;a href="javascript:window.open(location, '_self').close();"&gt;关闭&lt;/a&gt; (2认同)

Pal*_*esz 64

此方法适用于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>
Run Code Online (Sandbox Code Playgroud)

  • 更简单:`open(location,'_ self').close();` (54认同)
  • 这种方法在Firefox中被拒绝,不起作用:http://jsfiddle.net/krTXh/10/show/ (5认同)
  • 这在 IE 11 中运行良好,但在 Chrome 38 中不起作用 (4认同)

Guy*_*nat 28

据我所知,在Chrome或FireFox中不再可能.它可能仍然可以在IE中(至少pre-Edge).

  • 这(至少)在 Chrome 62 中有效:`&lt;button type="button" onclick="window.open('', '_self', ''); window.close();"&gt;Discard&lt;/button&gt;` [另见这篇文章](http://www.yournewdesigner.com/css-experiments/javascript-window-close-firefox.html) (3认同)

Mac*_*one 16

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

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



语境:

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

当前功能:

window.close()将适用于由脚本打开的选项卡,由锚点target="_blank"打开(在新选项卡中打开)

请参阅@killstreet 对@calios 的回答的评论


浏览器特定的解决方法:

谷歌浏览器:

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();
        }
    });
})();
Run Code Online (Sandbox Code Playgroud)

注意:此解决方案只能关闭选项卡,如果它不是最后一个打开的选项卡。因此,如果最后一个选项卡打开会导致窗口关闭,则它无法关闭选项卡。


火狐:

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>
Run Code Online (Sandbox Code Playgroud)

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


边缘:

令人失望的是,Edge 实际上在我尝试过的所有 3 种浏览器中表现最好,并且window.close()无需任何配置即可使用该方法。当window.close()脚本运行时,一个额外的弹出窗口会提醒您该页面正在尝试关闭当前选项卡并询问您是否要继续。

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

在此处输入图片说明


最后说明: Chrome 和 Firefox 的解决方案是浏览器有意禁用的解决方法,可能是出于安全原因。它们也都要求用户事先将他们的浏览器配置为兼容,因此对于供公共使用的站点来说可能不可行,但对于像我这样的本地托管解决方案来说是理想的。

希望这有帮助!:)


小智 14

有可能的.我搜遍了整个网络,但是当我参加微软的一次调查时,我终于得到了答案.

试试这个:

window.top.close();
Run Code Online (Sandbox Code Playgroud)

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

  • "脚本可能只关闭由它打开的窗口." 在Chrome 50上. (9认同)
  • 在Chrome 41中也不起作用. (6认同)

Mih*_*Mik 12

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

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

自动(close()工作时):

  • <a href="/close" target="_blank">浏览器将在新选项卡中打开地址,并且可以使用以下命令关闭该选项卡close()
  • 当从另一个应用程序打开新的浏览器选项卡时(当您单击 Telegram/Whatsup/Outlook 等中的链接时) - 操作系统将打开新选项卡,并且可以使用以下命令将其关闭close()
  • 当您使用 window.open('ya.ru') 打开时 - 确保它可以关闭close()

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

  • 当您打开新的浏览器并输入地址时。
  • 当您单击(+)打开新选项卡并输入地址时


Jul*_*rog 7

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

插入头部:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 
Run Code Online (Sandbox Code Playgroud)

HTML:

<a href="javascript:closeWindow();">Close Window</a>
Run Code Online (Sandbox Code Playgroud)

积分归Marcos J. Drake所有.

  • 不在 chrome 上运行“脚本可能只关闭由它打开的窗口。” (4认同)

Tha*_*ian 7

以下适用于Chrome 41:

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

我已经尝试了几个FF的想法,包括打开一个实际的网页,但似乎没有任何工作.据我所知,任何浏览器都会关闭带有xxx.close()的标签或窗口,如果它真的是由JS打开的,但至少FF不能通过打开该标签内的新内容来欺骗关闭标签.

当您考虑它时,这是有道理的 - 用户可能不希望JS关闭具有有用历史记录的选项卡或窗口.


pik*_*kax 7

<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>
Run Code Online (Sandbox Code Playgroud)

这对我有用


Bha*_*hah 6

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

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


kil*_*eet 5

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

<script>
    window.close();
</script>
Run Code Online (Sandbox Code Playgroud)