Извините за некропост, но недавно я реализовал локально размещенный сайт, который нуждался в возможности закрыть текущую вкладку браузера и нашел некоторые интересные обходные пути, которые не были хорошо документированы в любом месте, где я мог найти, поэтому взял на себя это.
Примечание. Эти обходные пути были сделаны с учетом локально размещенного сайта, и (за исключением Edge) требуют, чтобы браузер был специально настроен, поэтому он не будет идеальным для общедоступных сайтов.
Контекст: в прошлом скрипт jQuerywindow.close()
мог без проблем закрывать текущую вкладку в большинстве браузеров. Однако современные браузеры больше не поддерживают этот сценарий, возможно, по соображениям безопасности.
Гугл Хром:
Chrome не позволяет запускать скрипт window.close (), и ничего не происходит, если вы попытаетесь его использовать. Однако с помощью плагина Chrome TamperMonkey мы можем использовать метод window.close (), если вы // @grant window.close
включите в заголовок UserScript TamperMonkey.
Например, мой скрипт (который запускается при нажатии кнопки с 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();
}
});
})();
Замечания: Это решение может закрыть вкладку, только если она НЕ является последней открытой вкладкой. Так эффективно, он не может закрыть вкладку, если это приведет к закрытию окна, будучи последней открытой вкладкой.
Fire Fox:
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 показал лучший результат из всех трех браузеров, которые я пробовал, и работал с window.close()
методом без какой-либо настройки. Когда window.close()
скрипт запускается, дополнительное всплывающее окно предупреждает вас о том, что страница пытается закрыть текущую вкладку, и спрашивает, хотите ли вы продолжить.
Заключительное примечание: . Решения для Chrome и Firefox - это обходные пути, которые браузеры намеренно отключили, возможно, из соображений безопасности. Они также требуют, чтобы пользователь настраивал свои браузеры так, чтобы они были совместимы заранее, поэтому, скорее всего, они не будут жизнеспособными для сайтов, предназначенных для общего пользования, но идеально подходят для локально размещенных решений, таких как мой.
Надеюсь, это помогло! :)