我想在网页上创建一个链接,该链接将关闭浏览器中当前活动的选项卡而不关闭浏览器中的其他选项卡。
当用户单击关闭链接时,应出现一条警告消息,要求用户使用“是”和“否”两个按钮进行确认。如果用户单击“是”,则关闭该页面,如果“否”,则不执行任何操作。
怎么做到呢?有什么建议?
我想在网页上创建一个链接,该链接将关闭浏览器中当前活动的选项卡而不关闭浏览器中的其他选项卡。
当用户单击关闭链接时,应出现一条警告消息,要求用户使用“是”和“否”两个按钮进行确认。如果用户单击“是”,则关闭该页面,如果“否”,则不执行任何操作。
怎么做到呢?有什么建议?
您将需要 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 会要求用户确认。其他浏览器可能会有所不同。
尝试这个
<a href="javascript:window.open('','_self').close();">close</a>
此方法适用于 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 或 FireFox 中不再可能。它可能在 IE 中仍然是可能的(至少 pre-Edge)。
很抱歉发布此消息,但我最近实现了一个本地托管站点,该站点需要能够关闭当前浏览器选项卡,并发现了一些有趣的解决方法,这些解决方法在我能找到的任何地方都没有得到很好的记录,所以我自己就这样做了。
注意:这些变通方法是在考虑到本地托管站点的情况下完成的,并且(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 的解决方案是浏览器有意禁用的解决方法,可能是出于安全原因。它们也都要求用户事先将他们的浏览器配置为兼容,因此对于供公共使用的站点来说可能不可行,但对于像我这样的本地托管解决方案来说是理想的。
希望这有帮助!:)