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

IT技术 javascript html hyperlink
2021-02-07 03:04:28

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

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

6个回答

您将需要 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()对话框上的选项将是“确定”和“取消”(不是“是”和“否”)。如果你真的想要 Yes 和 No 你需要创建某种模态 Javascript 对话框。

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

您无法通过 JavaScript 关闭任何选项卡。“仅允许为使用 window.open 方法由脚本打开的窗口调用此方法。” 换句话说,您只能使用 JavaScript 关闭通过 JavaScript 生成的窗口/选项卡。
2021-03-11 03:04:28
-1 chrome 30 PC 不起作用 其他答案显示在当前选项卡中打开一个窗口然后关闭它
2021-03-19 03:04:28
Inabout:config dom.allow_scripts_to_close_windows = true可能是 Firefox 中的解决方案(可能是一个很大的安全风险!)
2021-03-23 03:04:28
这(至少)在 Chrome 62 中有效:<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> 另见这篇文章
2021-03-30 03:04:28
浏览器不允许这种行为。Javascript 只能关闭它打开的选项卡。
2021-04-09 03:04:28

尝试这个

<a href="javascript:window.open('','_self').close();">close</a>
在 chrome 60.0.3079.0 中不起作用:“脚本只能关闭由它打开的窗口。”
2021-03-10 03:04:28
在 Firefox 31.0 中工作
2021-03-13 03:04:28
从 Chrome 控制台执行此操作输出“脚本可能只关闭由它打开的窗口”
2021-03-18 03:04:28
<a href="javascript:window.open(location, '_self').close();">关闭</a>
2021-03-27 03:04:28
这个解决方案的坏处是 get 请求被发送到服务器。但另一方面,我还没有找到任何其他解决方案。
2021-04-05 03:04:28

此方法适用于 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();
2021-03-24 03:04:28
这在 IE 11 中运行良好,但在 Chrome 38 中不起作用
2021-04-05 03:04:28

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

问题是关于从该选项卡中关闭当前活动选项卡。正如你所说,这在 Chrome 或 Firefox 中是不可能的。这应该是公认的答案。
2021-03-21 03:04:28
这(至少)在 Chrome 62 中有效:<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> 另见这篇文章
2021-03-27 03:04:28
@hering 好吧,这篇文章是 2006 年的,但如果你发现了一些有用的东西,那是个好消息,也许会帮助那些读到这里的人。感谢分享。
2021-04-04 03:04:28

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

注意:这些变通方法是在考虑到本地托管站点的情况下完成的,并且(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();
        }
    });
})();

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


火狐:

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

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

在此处输入图片说明


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

希望这有帮助!:)