Desculpe por fazer isso, mas recentemente eu implementei um site hospedado localmente que precisava fechar a guia atual do navegador e encontrei algumas soluções interessantes que não estão bem documentadas em nenhum lugar que eu pudesse encontrar, então decidi fazer isso.
Nota: Essas soluções alternativas foram feitas com um site hospedado localmente e (com exceção do Edge) exigem que o navegador seja configurado especificamente, portanto, não seria ideal para sites hospedados publicamente.
Contexto: No passado, o script jQuery window.close()
conseguia fechar a guia atual sem problemas na maioria dos navegadores. No entanto, navegadores modernos não suportam mais esse script, potencialmente por motivos de segurança.
Google Chrome:
O Chrome não permite que o script window.close () seja executado e nada acontece se você tentar usá-lo. No entanto, usando o TamperMonkey do plug-in do Chrome, podemos usar o método window.close () se você incluir o // @grant window.close
cabeçalho no UserScript do TamperMonkey.
Por exemplo, meu script (que é acionado quando um botão com id = 'close_page' é clicado e se 'yes' for pressionado no pop-up do navegador) se parece com:
// ==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: Esta solução só pode fechar a guia se NÃO for a última guia aberta no entanto. Tão eficazmente, ele não pode fechar a guia se fizer com que a janela seja fechada sendo a última guia aberta.
Raposa de fogo:
O Firefox possui uma configuração avançada que você pode ativar para permitir que os scripts fechem as janelas, ativando efetivamente o window.close()
método. Para ativar essa configuração, vá para about: config , procure e encontre a preferência dom.allow_scripts_to_close_windows e mude de false para true.
Isso permite que você use o window.close()
método diretamente no seu arquivo jQuery, como faria com qualquer outro script.
Por exemplo, este script funciona perfeitamente com a preferência definida como true:
<script>
$("#close_page").click(function() {
var confirm_result = confirm("Are you sure you want to quit?");
if (confirm_result == true) {
window.close();
}
});
</script>
Isso funciona muito melhor do que a solução alternativa do Chrome, pois permite que o usuário feche a guia atual, mesmo que seja a única guia aberta e não exija um plug-in de terceiros. A única desvantagem, no entanto, é que ele também permite que esse script seja executado por sites diferentes (não apenas aquele em que você pretende usá-lo); portanto, isso pode ser um risco à segurança, embora eu não possa imaginar que o fechamento da guia atual seja particularmente perigoso.
Beira:
De maneira decepcionante, o Edge realmente obteve o melhor dos três navegadores que experimentei e trabalhei com o window.close()
método sem exigir nenhuma configuração. Quando o window.close()
script é executado, um pop-up adicional alerta você que a página está tentando fechar a guia atual e pergunta se você deseja continuar.
Nota final: As soluções para Chrome e Firefox são soluções alternativas para algo que os navegadores desabilitaram intencionalmente, potencialmente por razões de segurança. Ambos também exigem que o usuário configure seus navegadores para serem compatíveis com antecedência, portanto, provavelmente não seriam viáveis para sites destinados ao uso público, mas são ideais para soluções hospedadas localmente como a minha.
Espero que isso tenha ajudado! :)