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.

Derek
fonte
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
Não é mais possível. stackoverflow.com/a/19768082/391101
harvest316

Respostas:

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

Isso funciona para mim.

Arabam
fonte
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é ?!

usuario
fonte
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.

rvighne
fonte
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){

            }
        }
    }
Kuldip D Gandhi
fonte
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.

Danny Beckett
fonte
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

JimB
fonte
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();
Jbabey
fonte
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.

Harley Holcombe
fonte
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

Mada Aryakusumah
fonte
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

Vivek
fonte
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>
Niloofar
fonte
2

Isso vai funcionar:

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

fonte
Trabalhei na implementação do Chrome Python Eel.
revliscano
1
window.opener=window;
window.close();
Danny Beckett
fonte
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');.

Billy Jo
fonte
0

A melhor solução que encontrei é:

this.focus();
self.opener=this;
self.close();
Derek
fonte
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.

Kamleshkumar Gujarathi
fonte
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"

nurmurat
fonte
-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.

Logan Hasbrouck
fonte
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