Como fechar a guia atual em uma janela do navegador?


436

Quero criar um link em uma página da Web que feche a guia atualmente ativa em um navegador sem fechar outras guias no navegador.
Quando o usuário clica no link fechar, uma mensagem de alerta deve aparecer pedindo ao usuário que confirme com dois botões, "SIM" e "NÃO". Se o usuário clicar em "SIM", feche essa página e, se "NÃO", não faça nada.

Como pode ser feito? Alguma sugestão?


Talvez eu esteja atrasado aqui, mas isso é impedido pelos navegadores por uma razão. <br> <br> Pense em você mesmo tentando fechar uma janela várias vezes e não está fechando, pois está fazendo a parte " se não " da sua pergunta que é 'não fazer nada'. <br> <br> Isso vai ser irritante, com certeza!
Muhammad Osama

Respostas:


503

Você precisará de Javascript para fazer isso. Use window.close():

close();

Nota: a guia atual está implícita. Isso é equivalente:

window.close();

ou você pode especificar uma janela diferente.

Assim:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

com HTML:

<a href="javascript:close_window();">close</a>

ou:

<a href="#" onclick="close_window();return false;">close</a>

Vocês return false aqui para impedir o comportamento padrão do evento. Caso contrário, o navegador tentará acessar esse URL (o que obviamente não é).

Agora, as opções na window.confirm()caixa de diálogo serão OK e Cancelar (não Sim e Não). Se você realmente deseja Sim e Não, precisará criar algum tipo de caixa de diálogo Javascript modal.

Nota: existem diferenças específicas do navegador com as opções acima. Se você abriu a janela com Javascript (via window.open()), poderá fechar a janela com javascript. O Firefox não permite que você feche outras janelas. Acredito que o IE solicitará confirmação ao usuário. Outros navegadores podem variar.


387
Você não pode fechar nenhuma guia via JavaScript. "Este método só pode ser chamado para janelas que foram abertas por um script usando o método window.open." Em outras palavras, você só pode usar JavaScript para fechar uma janela / guia que foi gerada por JavaScript.
Ryan Joy

7
-1 não funciona cromo 30 PC as outras respostas que mostram para abrir uma janela na aba atual e feche-lo funcionar
markasoftware

2
Em about:config dom.allow_scripts_to_close_windows = truepode ser a solução no Firefox (pode ser um grande risco à segurança!)
Nepomuk Frädrich

6
O navegador não permite esse comportamento. Javascript pode fechar apenas uma guia que foi aberta.
Edward Kennedy

1
Isso funciona (pelo menos) no Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> consulte também este artigo
anunciando

247

Tente isto

<a href="javascript:window.open('','_self').close();">close</a>

2
Trabalhando no Firefox 31.0
Adrian Carr

1
O lado ruim dessa solução é que uma solicitação de obtenção é enviada ao servidor. Mas, por outro lado, não encontrei outra solução.
100

18
Fazendo isso a partir do console do Chrome gera resultados "Os scripts podem fechar apenas as janelas que foram abertas por ele"
parliament

Não funciona Os scripts podem fechar apenas as janelas que foram abertas por ele.
Roman Losev 28/10

1
Não está funcionando no chrome 60.0.3079.0: "Os scripts podem fechar apenas as janelas que foram abertas por ele."
precisa saber é o seguinte

65

Este método funciona no Chrome e IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>

56
Mais simples:open(location, '_self').close();
uınbɐɥs

Isso funcionou bem no IE 11, mas não funcionou no Chrome 38
Yann Duran

31

Até onde eu sei, isso não é mais possível no Chrome ou no FireFox. Ainda pode ser possível no IE (pelo menos antes do Edge).


2
Isso funciona (pelo menos) no Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> consulte também este artigo
anunciando

@hering Bem, o artigo é de 2006, mas se você encontrou algo que funciona, é uma ótima notícia e talvez ajude as pessoas que lêem até aqui. Obrigado por compartilhar.
Guy Schalnat

A pergunta era sobre fechar a guia ativa atual a partir dessa guia. Como você diz, não é possível no Chrome ou Firefox. Essa deve ser a resposta aceita.
decates 20/09/18

14

É possível. Eu procurei na net toda por isso, mas uma vez quando fiz uma das pesquisas da microsoft, finalmente consegui a resposta.

tente isto:

window.top.close();

isso fechará a guia atual para você.


12
"Os scripts podem fechar apenas as janelas que foram abertas por ele." no Chrome 50.
Husky

7

Testado com sucesso no FF 18 e no Chrome 24:

Inserir na cabeça:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

Os créditos vão para Marcos J. Drake .


Não funcionando no chrome "Os scripts podem fechar apenas as janelas que foram abertas por ele."
César León

7

Tente isso também. Trabalhando para mim nos três principais navegadores.

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

não funciona no Firefox Quantum 68.0.1
Zeke

7

O seguinte funciona para mim no Chrome 41:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

Eu tentei várias idéias para o FF, incluindo a abertura de uma página da Web real, mas nada parece funcionar. Tanto quanto eu entendo, qualquer navegador fechará uma guia ou janela com xxx.close () se ele realmente foi aberto pelo JS, mas o FF, pelo menos, não pode ser enganado para fechar uma guia abrindo novo conteúdo dentro dessa guia.

Isso faz sentido quando você pensa sobre isso - um usuário pode não querer que o JS feche uma guia ou janela que tenha histórico útil.


Chrome: 'Uncaught TypeError: Não é possível definir propriedade 'innerHTML' de null'
Francisco Corrales Morales

5

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.closecabeç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.

insira a descrição da imagem aqui

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! :)


5

Quanto às pessoas que ainda estão visitando esta página, você só pode fechar uma guia que é aberta por um script OU usando a tag anchor do HTML com o alvo _blank. Ambos podem ser fechados usando o

<script>
    window.close();
</script>

Isso funciona em todos os navegadores modernos. O IE11 e o Edge 17 mostram um alerta de confirmação, mas ainda funciona.
Fabian von Ellerts 24/10/19

1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

isso fez o trabalho para mim


1

um pouco tarde, mas foi isso que eu descobri ...

window.close()funcionará apenas (o IE é uma exceção) se a janela que você está tentando close()abrir foi aberta por um script usando o método window.open ().

! (veja o comentário de @killstreet abaixo sobre a tag âncora com o alvo _blank)

TLDR : chrome e firefox permitem fechá-los.

você receberá um erro do console: Os scripts podem não fechar as janelas que não foram abertas pelo script. como um erro e nada mais.

você pode adicionar um parâmetro exclusivo no URL para saber se a página foi aberta a partir de um script (como a hora) - mas é apenas um hack e não uma funcionalidade nativa e falhará em alguns casos.

Não consegui encontrar nenhuma maneira de saber se a página foi aberta de um open () ou não, e close não lançará e erros. isso NÃO imprimirá "teste":

try{
  window.close();
}
catch (e){
  console.log("text");
}

você pode ler no MDN mais sobre a função close ()


2
Não são apenas as guias que foram abertas pelos scripts, também é possível fechar uma tag de âncora com o alvo _blank. Até agora testado em chrome e firefox e ambos parecem permitir fechar guias que foram abertas por uma etiqueta de âncora.
Killstreet

-1

Veja como você criaria esse link:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>


-1

Esta é uma maneira de resolver o mesmo, declarar uma função JavaScript como esta

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

Adicione a seguinte linha ao HTML para chamar a função usando um <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.