janela.perto de mim.fechar não fechar a janela no cromo

o problema é que quando invoco {[[0]} ou self.close() não fecha a janela. Agora parece haver uma crença de que no Chrome você não pode fechar por script qualquer janela que não é script criado. Isso é manifestamente falso, mas, independentemente disso, ainda deve fazê-lo, mesmo que precise de aparecer um alerta para confirmar. Isto não está a acontecer.

assim como qualquer um tem um método real, funcional e comprovado de fechar uma janela usando algo como javascript:window.close() ou javascript:self.close() que realmente faz o que é esperado e algo que acontece muito bem em cada navegador que não é baseado no Chrome? Qualquer sugestão seria muito apreciada e eu estou procurando uma solução específica Javascript, nada JQuery ou implementação de terceiros.

Update: embora muito do que foi sugerido tenha sérias limitações e problemas de usabilidade, a última sugestão (específica da TamperMonkey) usando // @grant window.close no cabeçalho do script irá frequentemente fazer o truque mesmo nas páginas que normalmente não consigo lidar com o método de Fecho. Embora não inteiramente ideal e não generalizado a todos os casos, é uma boa solução no meu caso.

Author: GµårÐïåñ, 2013-11-04

12 answers

O javascript comum não consegue fechar as janelas sem querer. Este é um recurso de segurança, introduzido há um tempo atrás, para parar várias façanhas maliciosas e irritações.

A partir de a última especificação de trabalho para window.close():

O Método close() nos objectos da janela deve, se todas as condições seguintes forem cumpridas, fechar o contexto de navegação A:

  • o contexto de navegação correspondente a é script-closable .
  • o contexto de navegação do script histórico está familiarizado com o contexto de navegação a.
  • o contexto de navegação do script actual é permitido navegar no contexto de navegação a .

Um contexto de navegação é script-closable Se for um contexto de navegação auxiliar que foi criado por um script (em oposição a uma acção do utilizador), ou se for um contexto de navegação cujo histórico de sessões contém apenas um Documento.

Isto significa, com uma pequena excepção, javascript não deve ser permitido fechar uma janela que não foi aberta pelo mesmo javascript.

O cromo permite essa excepção -- que não se aplica aos userscripts -- no entanto o Firefox não. a implementação do Firefox está fora de questão.:

Este método só é permitido para ser chamado para janelas que foram abertas por um script usando o window.open metodo.


Se você tentar usar window.close a partir de um Greasemonkey / Tampermonkey / userscript que você vai ficar:
Firefox: A mensagem de erro, "Scripts may not close windows that were not opened by script."
Chrome: apenas falha silenciosamente.



A solução a longo prazo:

A melhor maneira de lidar com isto é fazer uma extensão cromada e/ou add-on Firefox em vez disso.Estes podem fechar de forma fiável a janela actual.

No entanto, uma vez que a segurança os riscos, colocados por window.close, são muito menores para um script Greasemonkey / Tampermonkey; Greasemonkey e Tampermonkey poderiam razoavelmente fornecer esta funcionalidade na sua API (essencialmente embalar o trabalho de extensão para você).
considere fazer um pedido de recurso.



Os montes de trabalho:

Cromo is currently was vulnerable to the" self redirection " exploit. Então um código como este costumava funcionar em geral:

open(location, '_self').close();
Isto é comportamento de buggy, IMO, e agora (aproximadamente em abril de 2015) está bloqueado. Continuará a funcionar a partir do código injectado apenas se a aba for aberta recentemente e não tiver páginas no histórico de navegação. Por isso, só é útil num pequeno conjunto de circunstâncias.

No entanto, uma variação ainda funciona no cromado (v43 & v44) mais Tampermonkey (V3.11 ou mais tarde). Utilize um @grant explícito e um window.close() simples. EG:

// ==UserScript==
// @name        window.close demo
// @include     http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant       GM_addStyle
// ==/UserScript==

setTimeout (window.close, 5000);

Graças azanetu pela actualização. Note que isso não vai funcionar se houver apenas uma aba aberta. Só fecha as páginas adicionais.


O Firefox está seguro contra essa façanha. Então, a única maneira de javascript é incapacitar as configurações de segurança, um navegador de cada vez.

Podes abrir about:config e preparar
allow_scripts_to_close_windows to true.

Se o seu guião é para uso pessoal, faça isso. Se pedires a alguém para virar essa instalação seria inteligente, e justificada, para declinar com preconceito.

Actualmente não existe uma configuração equivalente para o cromado.

 151
Author: Brock Adams, 2017-05-23 12:26:26

O Chrome fixou as questões de segurança na versão 36.0.1985.125

Quarta-feira, 16 de julho de 2014 Nota de lançamento

A partir da minha observação, esta actualização corrigiu o problema ao usar {[[2]} para fechar a janela popup. Você vai ver isso no console quando ele falhar, " Scripts podem fechar apenas as janelas que foram abertas por ele.". Isso significa que os hacky workarounds (a resposta de Brock Adams) podem não funcionar no último lançamento.

Então, na compilações anteriores lançadas pelo Chrome, o bloco de código abaixo pode funcionar, mas não com esta atualização.
window.open('', '_self', '');
window.close();

Para esta atualização, você tem que atualizar o seu código de acordo para fechar a janela popup. Uma das soluções é pegar no ID da janela e usar

chrome.windows.remove(integer windowId, function callback)

Método para removê-lo. A API de extensão Chrome windows pode ser encontrada em chrome.windows .

Na verdade a minha extensão cromada MarkView {[8] } estava a enfrentar este problema e tive de actualizar o meu código para que funcionasse para esta actualização do Chrome. A propósito, MarkView é uma ferramenta para ler e escrever Arquivos de Markdown impressionantes, ele fornece recursos incluindo contorno de conteúdo, tabelas relatáveis e realce de sintaxe de bloco de código com número de linha.

Eu também criei Este post , quaisquer comentários são bem-vindos.

 25
Author: swcool, 2014-07-29 04:33:43

Em tampermonkey agora pode usar

// @grant        window.close
E depois liga-me.
window.close();
 14
Author: balping, 2016-01-19 11:30:15
Estou a usar o método postado pelo Brock Adams e até funciona no Firefox, se for iniciado pelo utilizador.
open(location, '_self').close();

Estou a chamá-lo a partir de um botão pressione por isso é utilizador iniciado, e ainda está a funcionar bem usando Chrome 35-40, Internet Explorer 11, Safari 7-8 e também Firefox 29-35. Eu testei usando a versão 8.1 do Windows e Mac OS X 10.6, 10.9 & 10.10 se isso for diferente.


A completa código:

HTML:

<input type="button" name="Quit" id="Quit" value="Quit" onclick="return quitBox('quit');" />

JavaScript:

function quitBox(cmd)
{   
    if (cmd=='quit')
    {
        open(location, '_self').close();
    }   
    return false;   
}

Tente esta página de teste: (agora testada em cromado 40 e Firefox 35)

Http://browserstrangeness.bitbucket.io/window_close_tester.htm

 13
Author: Jeff Clayton, 2017-04-16 02:56:49

Muitas pessoas ainda estão a tentar encontrar uma forma de fechar o navegador Chrome usando javascript. o seguinte método só funciona quando você usa o Chrome como lançador de aplicações - quiosque, por exemplo!

Eu testei o seguinte:

Estou a usar a seguinte extensão: fechar o quiosque

Estou a seguir as instruções de utilização e parece funcionar perfeitamente (certifique-se que limpa o cache enquanto faz os testes). O javascript que eu uso é (anexado ao clique event):

window.location.href = '/closekiosk';
Espero que isso ajude alguém, pois é a única solução de trabalho que encontrei.

Nota: parece que a extensão corre em segundo plano e adiciona um ícone da bandeja cromada. Tem a seguinte opção assinalada:" deixe o cromo correr em segundo plano " (ou texto similar). Você pode precisar de brincar com ele, até que funcione para você. Eu descarreguei e agora funciona bem!

 9
Author: Minister, 2014-08-05 18:30:10

Apesar de pensar que é "manifestamente falso", o que se diz" parece ser uma crença " está correcto. A documentação do Mozilla para a janela .close diz

Este método só pode ser chamado para janelas que foram abertas por um script usando a janela.método aberto. Se a janela não foi aberta por um script, o seguinte erro aparece na consola de JavaScript: os Scripts podem não fechar as janelas que não foram abertas pelo script

Dizes que é. "é suposto continuar a fazê-lo", mas acho que não vai encontrar nenhuma referência que corrobore isso, talvez se tenha esquecido de alguma coisa?
 5
Author: Gareth, 2013-11-04 07:19:38
Encontrei uma nova maneira que funciona para mim.
var win = window.open("about:blank", "_self");
win.close();
 4
Author: Gerardo Abdo, 2015-01-27 09:59:46

O código abaixo funcionou para mim -

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

Testado em cromado 43.0.2357.81

 4
Author: DfrDkn, 2015-05-29 07:49:31
Isto pode ser antigo, mas vamos atender.

Uso topo.fechar () para fechar uma página. Janela.fechar () ou outro aberto...o close não funcionou comigo.

 2
Author: Soley, 2014-08-10 13:32:05

No meu caso, a página precisava de fechar, mas pode ter sido aberta por um link e assim window.close falharia.

A solução que escolhi é emitir o window.close, seguido por um {[3] } que redirecciona para uma página diferente.

Dessa forma, se window.close for bem sucedido, a execução nessa página pára, mas se falhar, em um segundo, irá redirecionar para uma página diferente.

window.close();
window.setTimeout(function(){location.href = '/some-page.php';},1000);
 0
Author: user2182349, 2018-10-08 14:22:08

Só se abrir uma nova janela com a janela.open () será que a nova janela será capaz de fechar usando o código como eu mencionei acima. Isso funciona perfeitamente para mim :) nota : nunca use o href para abrir a página em uma nova página. Janela.close () não trabalha com "href". Usa a janela.abrir () instead.

 -1
Author: DfrDkn, 2015-05-28 15:56:15
Tenta algo como este onclick = "volta-Te".close ()"
 -4
Author: Ragven, 2015-08-27 09:11:38