Ci scusiamo per il necroposting, ma di recente ho implementato un sito ospitato localmente che aveva avuto la necessità di chiudere la scheda del browser corrente e ho trovato alcune soluzioni alternative che non sono ben documentate ovunque io possa trovare, quindi ho accettato me stesso per farlo.
Nota: queste soluzioni alternative sono state eseguite pensando a un sito ospitato localmente e (ad eccezione di Edge) richiedono che il browser sia specificamente configurato, quindi non sarebbe l'ideale per i siti ospitati pubblicamente.
Contesto: in passato lo script jQuery window.close()
era in grado di chiudere la scheda corrente senza problemi sulla maggior parte dei browser. Tuttavia, i browser moderni non supportano più questo script, potenzialmente per motivi di sicurezza.
Google Chrome:
Chrome non consente l'esecuzione dello script window.close () e non si verifica nulla se si tenta di utilizzarlo. Utilizzando il plugin Chrome TamperMonkey, tuttavia, possiamo usare il metodo window.close () se includi l' // @grant window.close
intestazione UserScript di TamperMonkey.
Ad esempio, il mio script (che viene attivato quando si fa clic su un pulsante con id = 'close_page' e se si preme 'yes' sul popup del browser) appare come:
// ==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();
}
});
})();
Nota: questa soluzione può chiudere la scheda solo se NON è l'ultima scheda aperta. In modo così efficace, non può chiudere la scheda se causerebbe la chiusura della finestra essendo l'ultima scheda aperta.
Firefox:
Firefox ha un'impostazione avanzata che puoi abilitare per consentire agli script di chiudere Windows, abilitando efficacemente il window.close()
metodo. Per abilitare questa impostazione vai su about: config quindi cerca e trova la preferenza dom.allow_scripts_to_close_windows e passa da falso a vero.
Ciò ti consente di utilizzare il window.close()
metodo direttamente nel tuo file jQuery come faresti con qualsiasi altro script.
Ad esempio, questo script funziona perfettamente con la preferenza impostata su true:
<script>
$("#close_page").click(function() {
var confirm_result = confirm("Are you sure you want to quit?");
if (confirm_result == true) {
window.close();
}
});
</script>
Funziona molto meglio della soluzione alternativa di Chrome in quanto consente all'utente di chiudere la scheda corrente anche se è l'unica scheda aperta e non richiede un plug-in di terze parti. L'unico aspetto negativo è che consente anche a questo script di essere eseguito da diversi siti Web (non solo quello su cui si intende utilizzarlo), quindi potrebbe essere potenzialmente un rischio per la sicurezza, anche se non posso immaginare che chiudere la scheda corrente sia particolarmente pericoloso.
Bordo:
Deludentemente Edge ha effettivamente offerto il meglio di tutti e 3 i browser che ho provato e ha lavorato con il window.close()
metodo senza richiedere alcuna configurazione. Quando window.close()
viene eseguito lo script, un popup aggiuntivo avvisa che la pagina sta tentando di chiudere la scheda corrente e chiede se si desidera continuare.
Nota finale: Le soluzioni per Chrome e Firefox sono soluzioni alternative per qualcosa che i browser hanno disabilitato intenzionalmente, potenzialmente per motivi di sicurezza. Entrambi richiedono inoltre all'utente di configurare prima i propri browser in modo che siano compatibili prima, quindi probabilmente non sarebbero fattibili per siti destinati all'uso pubblico, ma sono ideali per soluzioni ospitate localmente come la mia.
Spero che questo abbia aiutato! :)