如何在浏览器窗口中关闭当前标签?

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

怎样才能做到呢?有什么建议吗?

1383260 次浏览

您将需要Javascript来完成此操作。使用# EYZ1:

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

下面是如何创建这样一个链接:

# EYZ0

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

在FF 18和Chrome 24测试成功:

插入头部:

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

HTML:

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

感谢马科斯·j·德雷克

试试这个

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

这是解决这个问题的一种方法,像这样声明一个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>

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

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

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

试试这个:

window.top.close();

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

以下工作为我在Chrome 41:

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

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

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

据我所知,在Chrome或FireFox中已经不可能了。这在IE中仍然是可能的(至少在edge之前)。

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

window.close()只会工作(IE是一个例外),如果你试图close()的窗口是由一个脚本使用window.open()方法打开的。

(请参阅下面@killstreet关于target _blank的锚标签的评论)

TLDR:铬&Firefox允许关闭它们。

你将得到控制台错误: 脚本不能关闭非脚本打开的窗口。

你可以在URL中添加一个唯一的参数来知道页面是否从脚本打开(比如时间)- 但这只是个黑客,而不是原生功能,在某些情况下将失败

我找不到任何方法知道页面是否从open()打开, 并且close不会抛出和错误。 this will NOT print "test":

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

你可以阅读在MDN中更多关于close()函数

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

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

这对我来说很有效

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

这些解决方案都是在本地托管网站的情况下完成的,并且(Edge除外)要求浏览器进行专门配置,因此对于公共托管网站来说并不理想。



背景:

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

当前功能:

window.close()将工作在由脚本打开的标签上,由一个锚和target="_blank"(在一个新标签中打开)

参见@killstreet对@calios的回答的评论


浏览器特定的解决方案:

谷歌Chrome:

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()方法。要启用这个设置,转到:配置,然后搜索并找到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()脚本时,一个额外的弹出窗口会提醒您页面正在尝试关闭当前选项卡,并询问您是否想要继续。

<强>编辑: 这是在旧版本的边缘不是基于铬。我还没有测试过它,但想象一下它将类似于基于铬的Chrome版本

MS Edge关闭tab确认框


Chrome和Firefox的解决方案都是浏览器故意禁用的,可能是出于安全原因。它们也都要求用户事先配置浏览器以使其兼容,因此可能不适用于公共站点,但对于像我这样的本地托管解决方案非常理想。

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

手动(当它不工作时):

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

您可以尝试使用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

我只是想在2021年添加window.close() 作品, chrome 91,但不总是这样。如果在TAB中没有历史记录(你不能回到过去)。

在我的情况下,我想创建自毁选项卡,关闭后几秒钟,但我在努力如何去开发服务器避免新选项卡,因为显然新选项卡也是选项卡,它被保存在选项卡历史:D我创建的链接大约:空白选项卡与target=_blank属性,它导致新选项卡,window.close()方法终于工作了!

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

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

由于严格的浏览器行为,window.close()只有在由window.open(...)打开时才能工作

但是我做了一个解决方案 !

  1. 当它是不包括时,添加一个空的window.open(...)标签
  2. 当关闭的最佳时间到来时,调用window.close
  3. 如果2。已经返回一个错误,替换任何标签或HTTP参数与一个空的标签,最后关闭窗口
<button onclick="myFunction()">Close</button>
<script>
if (location.href.indexOf("#") == -1) {
window.open(location.href + "#", "_self")
}


function myFunction() {
try {
window.close()
} catch (err) {
window.open(location.href.substring(0, location.href.indexOf("?")).substring(0, location.href.indexOf("#")) + "#", "_self")
window.close()
}
}
</script>

现场演示中输入close