Como posso fechar uma janela do navegador sem receber o prompt “Deseja fechar esta janela”?


86

Como posso fechar uma janela do navegador sem receber o prompt Deseja fechar esta janela ?

O prompt ocorre quando eu uso a window.close();função.


22
mais fácil:window.open('','_self').close()
— markasoftware

No Firefox, tudo isso pode ser discutível se o usuário desabilitar o fechamento da janela. kb.mozillazine.org/…
— Brian

3
A menos que você seja o proprietário da janela, não deveria.
— Robert Harvey de

Respostas:


85
window.open('', '_self', ''); window.close();

Isso funciona para mim.


Funciona para IE11, Safary 5.1.7, mas não funciona em FF e Chrome.
— nikolai.serdiuk

Trabalhando no Firefox 38.0.5 e Chrome 43
— justanotherprogrammer

e se a janela for aberta usando showModalDialog? Não funciona no IE10
— bjan

Não tenho certeza se isso funciona em todos os navegadores, mas funciona no IE11 !!! Qual é o navegador para o qual devemos construir, atualmente. Obrigado por esta resposta, você me salvou de muitos problemas.
— CrazyPaste

Funciona bem no IE 11, Chrome 76.0.3809, Firefox 69.0
— Rahul Mahadik

57

Meu amigo ... há uma maneira, mas "hack" não começa a descrevê-la. Basicamente, você tem que explorar um bug no IE 6 e 7.

Funciona sempre!

Em vez de chamar window.close(), redirecione para outra página.

Página de abertura:

alert("No whammies!");
window.open("closer.htm", '_self');

Redirecione para outra página. Isso engana o IE para permitir que você feche o navegador nesta página.

Página de fechamento:

<script type="text/javascript">
    window.close();
</script>

Incrível né ?!


1
Eu sei que já se passaram 2 anos. Mas é incrível .. Funciona no IE 8 e firefox 15
— Susie

9
Parece que a Microsoft corrigiu esse bug no IE10. Alguém sabe como ainda podemos conseguir isso no IE10?
— Abhi Rampal

Tanto self.close () quanto window.close () não funcionam para o IE do meu lado. No entanto, Chrome, FF e Safari estão bem
— NoName,

57

Os scripts não têm permissão para fechar uma janela aberta por um usuário. Isso é considerado um risco de segurança. Embora não esteja em nenhum padrão, todos os fornecedores de navegadores seguem isso ( documentos do Mozilla ). Se isso acontecer em alguns navegadores, é um bug de segurança que (idealmente) é corrigido muito rapidamente.

Nenhum dos hacks nas respostas a esta pergunta funciona mais, e se alguém surgisse com outro hack sujo, eventualmente ele também pararia de funcionar.

Eu sugiro que você não gaste energia lutando contra isso e adote o método que o navegador oferece de forma tão útil - pergunte ao usuário antes de você aparentemente travar sua página.


5
Ou ainda mais simples: não feche a janela. Quando terminar, envie o usuário de volta à sua página inicial ou a algum outro tipo de local central.
— crepúsculo-inativo-

2
@duskwuff, estamos executando testes automatizados nesses navegadores. Eles precisam fechar .
— ouflak 01 de

2
@ouflak Certamente sua estrutura de teste tem alguma maneira de manipular janelas.
— duskwuff -inactive-

1
@duskwuff E quanto às bibliotecas de terceiros que deixam janelas por aí? Você certamente não pode estar sugerindo que eu simplesmente deixe essa bagunça para o usuário ou redirecione-o para uma visualização (duplicada) da página inicial.
— Carrinho abandonado em

1
Você poderia explicar também em sua resposta em nota de rodapé por que é um risco à segurança.
— T.Todua

31

Aqui está a função Javascript que uso para fechar o navegador sem Prompt ou Aviso, também pode ser chamada a partir do Flash. Deve estar em arquivo html.

    function closeWindows() {
         var browserName = navigator.appName;
         var browserVer = parseInt(navigator.appVersion);
         //alert(browserName + " : "+browserVer);

         //document.getElementById("flashContent").innerHTML = "<br>&nbsp;<font face='Arial' color='blue' size='2'><b> You have been logged out of the Game. Please Close Your Browser Window.</b></font>";

         if(browserName == "Microsoft Internet Explorer"){
             var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;  
             if (ie7)
             {  
               //This method is required to close a window without any prompt for IE7 & greater versions.
               window.open('','_parent','');
               window.close();
             }
            else
             {
               //This method is required to close a window without any prompt for IE6
               this.focus();
               self.opener = this;
               self.close();
             }
        }else{  
            //For NON-IE Browsers except Firefox which doesnt support Auto Close
            try{
                this.focus();
                self.opener = this;
                self.close();
            }
            catch(e){

            }

            try{
                window.open('','_self','');
                window.close();
            }
            catch(e){

            }
        }
    }

No IE 10.0.9200, abrindo a janela com showModalDialog. Ligado closeWindows, abre uma nova janela (a mesma página) enquanto a anterior ainda está aberta.
— bjan,

Não funcionou no Firefox, o IE / Edge exibiu um prompt de confirmação - mas funcionou no Chrome.
— Dymas

12

Isso funciona no Chrome 26, Internet Explorer 9 e Safari 5.1.7 ( sem o uso de uma página auxiliar, como resposta de Nick):

<script type="text/javascript">
    window.open('javascript:window.open("", "_self", "");window.close();', '_self');
</script>

O aninhado window.openserve para fazer com que o IE não exiba a mensagem Deseja fechar esta janela prompt .

Infelizmente, é impossível fazer o Firefox fechar a janela.


Funcionou para o IE 10 também.
— Mukus de

11

Na tag body:

<body onload="window.open('', '_self', '');">

Para fechar a janela:

<a href="javascript:window.close();">

Testado no Safari 4.0.5, FF para Mac 3.6, IE 8.0 e FF para Windows 3.5


Funcionalmente, é a mesma coisa que Nick fez.
— naugtur

Sim. Se estou lendo a postagem de Nick corretamente, ele sugere um redirecionamento antes de chamar window.close. O que postei é se você não deseja usar um redirecionamento. Se estou interpretando mal as desculpas da postagem de Nick.
— JimB

7

Por razões de segurança, uma janela só pode ser fechada em JavaScript se tiver sido aberta por JavaScript. Para fechar a janela, você deve abrir uma nova janela com _selfcomo destino, que sobrescreverá sua janela atual, e então fechá-la (o que você pode fazer já que foi aberta via JavaScript).

window.open('', '_self', '');
window.close();

isso funcionou para mim com o Silverlight: HtmlPage.Window.Eval ("window.open ('', '_self', ''); window.close ();");
— Mike Fuchs,

6

A partir daqui :

<a href="javascript:window.opener='x';window.close();">Close</a>

Você precisa definir window.openeralgo, caso contrário, ele reclama.


Funciona para mim, quase 7 anos depois no Chrome, FF e IE 10.
— Mike Devenney

6

window.open('', '_self', '').close();

Lamento um pouco tarde aqui, mas encontrei a solução, pelo menos para o meu caso. Testado no Safari 11.0.3 e Google Chrome 64.0.3282.167


5

Por causa dos aprimoramentos de segurança no IE, você não pode fechar uma janela a menos que ela seja aberta por um script. Portanto, a maneira de contornar isso será deixar o navegador pensar que a página foi aberta usando um script e, em seguida, fechar a janela. Abaixo está a implementação.

Experimente, funciona como um encanto!
javascript fecha a janela atual sem prompt do IE

<script type="text/javascript">
function closeWP() {
 var Browser = navigator.appName;
 var indexB = Browser.indexOf('Explorer');

 if (indexB > 0) {
    var indexV = navigator.userAgent.indexOf('MSIE') + 5;
    var Version = navigator.userAgent.substring(indexV, indexV + 1);

    if (Version >= 7) {
        window.open('', '_self', '');
        window.close();
    }
    else if (Version == 6) {
        window.opener = null;
        window.close();
    }
    else {
        window.opener = '';
        window.close();
    }

 }
else {
    window.close();
 }
}
</script>

javascript fecha a janela atual sem prompt do IE


2

Crie uma função JavaScript

<script type="text/javascript">
    function closeme() {
        window.open('', '_self', '');
        window.close();
    }
</script>

Agora escreva este código e chame a função JavaScript acima

<a href="Help.aspx" target="_blank" onclick="closeme();">Help</a>

Ou simplesmente:

<a href="" onclick="closeme();">close</a>

2

Isso vai funcionar:

<script type="text/javascript">
function closeWindowNoPrompt()
{
window.open('', '_parent', '');
window.close();
}
</script>

Trabalhei na implementação do Chrome Python Eel.
— revliscano


0

O navegador está reclamando porque você está usando JavaScript para fechar uma janela que não foi aberta com JavaScript, ou seja window.open('foo.html');.


0

A melhor solução que encontrei é:

this.focus();
self.opener=this;
self.close();

0

Coloque o seguinte código no ASPX.

<script language=javascript>
function CloseWindow() 
{
    window.open('', '_self', '');
    window.close();
}
</script>

Coloque o código a seguir no código por trás do evento de clique do botão.

string myclosescript = "<script language='javascript' type='text/javascript'>CloseWindow();</script>";

Page.ClientScript.RegisterStartupScript(GetType(), "myclosescript", myclosescript);

Se você não tiver nenhum processamento antes de fechar, poderá colocar diretamente o seguinte código no próprio ASPX na tag de clique do botão.

OnClientClick="CloseWindow();"

Espero que isto ajude.


A questão pede uma solução simples de javascript, evite ASPX.
— Zeeshan

@Zeeshan: Qualquer desenvolvedor que se preze pode ver que o JavaScript no topo da postagem de Kamleshkumar Gujarathi pode ser aplicado aos seus próprios requisitos. Um toque áspero se você votasse contra sua resposta.
— Paul

0

Na minha situação, o código a seguir foi embutido em um arquivo php.

var PreventExitPop = true;
function ExitPop() {
  if (PreventExitPop != false) {
    return "Hold your horses! \n\nTake the time to reserve your place.Registrations might become paid or closed completely to newcomers!"
  }
}
window.onbeforeunload = ExitPop;

Então eu abri o console e escrevi o seguinte

PreventExitPop = false

Isso resolveu o problema. Portanto, descubra o código JavaScript e encontre a (s) variável (es) e atribua-lhes um "valor" apropriado que, no meu caso, era "falso"


-3

Vou postar isso porque é o que estou usando atualmente no meu site e funciona no Google Chrome e no IE 10 sem receber nenhuma mensagem pop-up:

<html>
    <head>
    </head>
    <body onload="window.close();">
    </body>
</html>

Tenho uma função em meu site que desejo executar para salvar uma variável on / off para a sessão sem ir diretamente para uma nova página, então eu apenas abro uma pequena página pop-up. Essa página da web se fecha imediatamente com a onload="window.close();"função.


Sim: mas como stackoverflow.com/a/24854246/2239406 informações: você abre a janela em javascript e pode fechar com javascript.
— Denis Chenu

bem, se não é para funcionar, e se foi 'corrigido', ainda funciona em todos os navegadores do meu pc sem falhas. Eu estava simplesmente fornecendo uma solução que estava funcionando para mim.
— Logan Hasbrouck

A diferença é: você abre a janela em JS. Se a janela não abrir em JS: não funciona.
— Denis Chenu

Não, não estou usando JS para abrir a janela; em vez disso, estou usando um acom target=_blankpara abrir uma pequena janela pop-up em um url específico e, finalmente, uso JS para fechar a janela. O objetivo é que a url específica salve um valor para a sessão para desabilitar as imagens de fundo, embora aqui em breve irei excluí-la em favor do ajax assim que descobrir como fazer ajax. (ainda aprendendo as cordas persay)
— Logan Hasbrouck
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.