Вибачте за некропост, але я нещодавно реалізував місцевий веб-сайт, який потребував можливості закрити поточну вкладку веб-переглядача і знайшов цікаві обхідні шляхи, які недостатньо добре зафіксовані в будь-якому місці, і я взяв на себе це зробити.
Примітка. Ці обхідні шляхи були зроблені на увазі локально розміщеному веб-сайті, і (за винятком Edge) потрібно, щоб браузер був спеціально налаштований, тому не було б ідеально для публічно розміщених сайтів.
Контекст: Раніше сценарій jQuery window.close()
міг без проблем закрити поточну вкладку в більшості браузерів. Однак сучасні браузери більше не підтримують цей сценарій, можливо, з міркувань безпеки.
Гугл хром:
Chrome не дозволяє запускати скрипт window.close (), і нічого не відбувається, якщо ви спробуєте ним скористатися. Використовуючи плагін Chrome TamperMonkey, проте ми можемо використовувати метод window.close (), якщо ви включите // @grant window.close
в заголовок UserScript TamperMonkey.
Наприклад, мій сценарій (який спрацьовує при натисканні кнопки id = 'close_page' і якщо на спливаючому вікні браузера натиснуто «так») виглядає так:
// ==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()
метод. Щоб увімкнути цей параметр, перейдіть до про: 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()
сценарій запускається, додаткове спливаюче вікно повідомляє про те, що сторінка намагається закрити поточну вкладку і запитує, чи потрібно продовжувати.
Заключна примітка: . Рішення для Chrome і Firefox є вирішенням того, що браузери навмисно вимкнено, можливо, з міркувань безпеки. Вони також вимагають, щоб користувач налаштував свої веб-переглядачі, щоб вони були сумісними раніше, тому, ймовірно, не будуть життєздатними для сайтів, призначених для загального користування, але ідеально підходять для локальних рішень, таких як мій.
Сподіваюся, це допомогло! :)