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

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


当前回答

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

这对我来说很有效

其他回答

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

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

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

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

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

我的解决方案是使用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()在2021,chrome 91工作,但并不总是。如果标签中没有历史记录(你不能返回),它就可以工作的情况之一。

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