Przepraszam za nekropostę tego, ale niedawno wdrożyłem lokalnie hostowaną witrynę, która wymagała możliwości zamknięcia bieżącej karty przeglądarki i znalazłem kilka ciekawych obejść, które nie są dobrze udokumentowane w dowolnym miejscu, więc postanowiłem to zrobić.
Uwaga: te obejścia zostały wykonane z myślą o witrynie hostowanej lokalnie i (z wyjątkiem Edge) wymagają specjalnej konfiguracji przeglądarki, więc nie byłyby idealne dla witryn hostowanych publicznie.
Kontekst: w przeszłości skrypt jQuerywindow.close()
był w stanie zamknąć bieżącą kartę bez problemu w większości przeglądarek. Jednak współczesne przeglądarki nie obsługują już tego skryptu, potencjalnie ze względów bezpieczeństwa.
Google Chrome:
Chrome nie pozwala na uruchomienie skryptu window.close () i nic się nie dzieje, jeśli spróbujesz go użyć. Za pomocą wtyczki Chrome TamperMonkey jednak mamy można użyć metody window.close () jeśli jesteś zawierać // @grant window.close
w nagłówku UserScript z TamperMonkey.
Na przykład mój skrypt (uruchamiany po kliknięciu przycisku o identyfikatorze = „close_page” i naciśnięciu „tak” w oknie podręcznym przeglądarki) wygląda następująco:
// ==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();
}
});
})();
Uwaga: To rozwiązanie może zamknąć kartę tylko wtedy, gdy NIE jest to ostatnia otwarta karta. Tak skutecznie nie może zamknąć karty, jeśli spowodowałoby zamknięcie okna, ponieważ jest ostatnią otwartą kartą.
Firefox:
Firefox ma zaawansowane ustawienia, które można włączyć, aby umożliwić skryptom zamykanie okien, co skutecznie włącza tę window.close()
metodę. Aby włączyć to ustawienie, przejdź do about: config, a następnie wyszukaj i znajdź preferencje dom.allow_scripts_to_close_windows i przełącz je z false na true.
Pozwala to na użycie window.close()
metody bezpośrednio w pliku jQuery, tak jak w przypadku każdego innego skryptu.
Na przykład ten skrypt działa idealnie z ustawioną preferencją true:
<script>
$("#close_page").click(function() {
var confirm_result = confirm("Are you sure you want to quit?");
if (confirm_result == true) {
window.close();
}
});
</script>
Działa to znacznie lepiej niż obejście Chrome, ponieważ pozwala użytkownikowi zamknąć bieżącą kartę, nawet jeśli jest to jedyna otwarta karta i nie wymaga wtyczki innej firmy. Jedynym minusem jest to, że umożliwia on uruchamianie tego skryptu na różnych stronach internetowych (nie tylko tych, na których zamierzasz go używać), więc może potencjalnie stanowić zagrożenie bezpieczeństwa, chociaż nie wyobrażam sobie, aby zamknięcie obecnej karty było szczególnie niebezpieczne.
Krawędź:
Rozczarowujące Edge faktycznie działał najlepiej ze wszystkich 3 przeglądarek, które wypróbowałem, i pracował z tą window.close()
metodą, nie wymagając żadnej konfiguracji. Po uruchomieniu window.close()
skryptu dodatkowe wyskakujące okienko ostrzega, że strona próbuje zamknąć bieżącą kartę i pyta, czy chcesz kontynuować.
Uwaga końcowa: rozwiązania dla Chrome i Firefox są obejściem problemu, który został celowo wyłączony przez przeglądarkę, potencjalnie ze względów bezpieczeństwa. Oba wymagają również od użytkownika skonfigurowania swoich przeglądarek, aby były kompatybilne wcześniej, więc prawdopodobnie nie byłyby opłacalne w przypadku witryn przeznaczonych do użytku publicznego, ale idealnie nadają się do rozwiązań hostowanych lokalnie, takich jak moje.
Mam nadzieję, że to pomogło! :)