很抱歉发布此消息,但我最近实现了一个本地托管的站点,该站点需要能够关闭当前浏览器选项卡,并发现了一些有趣的解决方法,这些解决方法在我能找到的任何地方都没有很好的记录,所以我自己去做了.
注意:这些变通办法是在考虑本地托管站点的情况下完成的,并且(Edge 除外)需要专门配置浏览器,因此不适用于公共托管站点。
上下文:
过去,jQuery 脚本window.close() 能够在大多数浏览器上毫无问题地关闭当前选项卡。但是,出于安全原因,大多数现代浏览器不再支持此脚本。
当前功能:
window.close() 将作用于由脚本打开的标签页,或由target="_blank" 的锚点打开(在新标签页中打开)
查看@killstreet 对@calios 回答的评论
浏览器特定的解决方法:
谷歌浏览器:
Chrome 不允许运行 window.close() 脚本,如果您尝试使用它,则不会发生任何事情。但是,通过使用 Chrome 插件 TamperMonkey,我们可以使用 window.close() 方法如果您将 // @grant window.close 包含在 TamperMonkey 的 UserScript 标头中。
例如,我的脚本(当单击 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。
这使您可以像使用任何其他脚本一样直接在 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() 脚本运行时,一个额外的弹出窗口会提醒您该页面正在尝试关闭当前选项卡并询问您是否要继续。
编辑:
这是在旧版本的 Edge 上,不是基于铬的。我还没有测试过,但想象一下它会在基于铬的版本上与 Chrome 类似
最后说明: Chrome 和 Firefox 的解决方案是针对浏览器故意禁用的某些问题的解决方法,可能是出于安全原因。它们还都要求用户事先将其浏览器配置为兼容,因此对于供公众使用的网站可能不可行,但对于像我这样的本地托管解决方案来说却是理想的选择。
希望这有帮助! :)