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

时间:2010-01-16 05:26:00

标签: javascript html hyperlink

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

怎么做?有什么建议吗?

20 个答案:

答案 0 :(得分:439)

您需要使用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()对话框中的选项将为OK和Cancel(不是Yes和No)。如果确实想要是和否,则需要创建某种模态Javascript对话框。

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

答案 1 :(得分:232)

试试这个

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

答案 2 :(得分: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>

答案 3 :(得分:23)

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

答案 4 :(得分:16)

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

试试这个:

window.top.close();

这将为您关闭当前标签。

答案 5 :(得分:6)

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

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

答案 6 :(得分:6)

以下内容适用于Chrome 41:

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

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

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

答案 7 :(得分:5)

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

插入头部:

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

HTML:

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

积分转到Marcos J. Drake

答案 8 :(得分:2)

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() 关闭它

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

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

答案 9 :(得分:2)

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

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

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

谷歌浏览器:

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

这允许您像使用其他任何脚本一样直接在您的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()脚本时,会弹出一个弹出窗口,提醒您该页面正在尝试关闭当前选项卡,并询问您是否要继续。

enter image description here

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

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

答案 10 :(得分:1)

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

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

答案 11 :(得分:0)

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

group(1)仅在使用window.open()方法的脚本打开了您要尝试window.close()的窗口时才有效(IE是例外)。

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

您可以在URL中添加一个唯一参数,以了解是否从脚本中打开了页面(如时间)-但这只是一个攻击,而不是本机功能,将失败

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

close()

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

答案 12 :(得分:0)

保证在未来的任何浏览器中都不会容忍关闭标签。使用上面提到的脚本是行不通的。

我的解决方案是使用 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 扩展程序的部署可能会很痛苦。

答案 13 :(得分:0)

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

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

答案 14 :(得分:0)

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

这为我完成了工作

答案 15 :(得分:0)

我可能在这里迟到了,但是由于某种原因浏览器阻止了此操作。

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

这肯定会很烦人!

答案 16 :(得分:-1)

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

答案 17 :(得分:-1)

您可以尝试使用此解决方案来欺骗浏览器使用 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

答案 18 :(得分:-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>

答案 19 :(得分:-1)

以下是创建此类链接的方法:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>