Apesar do que dizem alguns desses diálogos, eles não podem fazer nada malicioso . Você sempre pode clicar em OK ou em Sair da página para fechar a página ofensiva sem consequências.
Se a caixa de diálogo for muito longa e os botões estiverem fora da tela , você pode pressionarEnter para confirmar o fechamento da página.
Se você não possui um teclado (dispositivos com tela de toque), use o bookmarklet abaixo ou consulte a resposta do SimpleSimon (somente Chrome).
Agora, alguns detalhes.
Só há uma maneira de executar alguma ação quando uma página é fechada: através do onbeforeunload
evento. É claro que isso poderia ser facilmente usado contra o usuário (por exemplo, quando ele tenta fechar uma página, abre sua cópia em uma nova janela), por isso é muito limitado.
Na verdade, a única coisa razoável que você pode fazer é abrir uma caixa de diálogo com texto personalizado e dois botões, um para sair da página e outro para ficar. A única coisa que uma página pode fazer com essa caixa de diálogo é definir seu texto. Os botões e a barra de título são imutáveis. Aqui está uma captura de tela do Firefox 3.6: ( versão muito antiga do Firefox)
É claro que quando você permite que as pessoas mostrem pop-ups com qualquer texto e apenas os botões OK / Cancelar , você pode ter certeza de que mais cedo ou mais tarde alguns caras o usarão contra você.
Na captura de tela acima, OK significa apenas "Sair desta página", mas a descrição personalizada sugere algo mais. Portanto, os navegadores mudaram as caixas de diálogo, tornando mais difícil torná-las enganosas. Por exemplo, versões recentes do Firefox parecem ignorar o texto personalizado:
O Chrome mostra o texto personalizado, mas sempre anexa uma pergunta, perguntando ao usuário o que ele deseja fazer e os botões explicitamente explicam suas ações: (mas ainda é propenso às mensagens "vídeos de gatos"!)
Aqui está o Internet Explorer 10, também "propenso a gatos":
O Opera 12 simplesmente ignora o onbeforeunload
evento e, se você tentar fechar uma guia assim, ela será fechada como qualquer outra. Eu não testei o Opera mais recente, no entanto.
Então, para resumir as coisas mais importantes:
- As páginas não podem mostrar diálogos com nenhum texto. O site pode solicitar que o navegador mostre uma caixa de diálogo com um texto personalizado, mas o navegador pode ignorá-lo completamente (Opera), usar texto genérico (Firefox) ou dizer explicitamente o que acontecerá (Chrome, IE).
- Os detalhes da caixa de diálogo dependem do navegador que você está usando, mas os botões são sempre imutáveis. Se eles não disserem explicitamente qual deles faz o quê, então OK significa "sair desta página * e Cancelar é" ficar aqui ".
- Os sites não podem executar ações maliciosas se você decidir deixá-los. Seus arquivos não serão substituídos por vídeos de gatos, você não será inundado por vírus 135234 e o FBI não será informado de que possui software ilegal no seu computador.
Você pode desativar o onbeforeunload
evento, se desejar, impedindo efetivamente que as páginas solicitem sua saída ou permanência. Aqui está um script de usuário para vários navegadores . (role para baixo se o link estiver inoperante)
Se você estiver em um site específico que mostra um pop-up malicioso e ainda tem medo de clicar em Deixar , crie um bookmarklet para removê-lo. Clique com o botão direito do mouse na barra de favoritos, escolha Novo favorito (ou equivalente) e cole-o como um URL: (é apenas um código reduzido no link acima)
javascript:var x=document.createElement('script');x.type='text/javascript';x.innerHTML='onbeforeunload=function(){};';document.body.appendChild(x);
Em seguida, basta clicar nesse marcador e o pop-up será temporariamente removido da página ativa.
Se você deseja testar a aparência desses pop-ups no navegador ou testar o bookmarklet / userscript, crie um arquivo de texto com o seguinte código e salve-o como um .html
arquivo:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
Parece que o link userscript está morto no momento, então aqui está uma cópia extraída do cache archive.org . Todo o crédito para o criador do script original.
// ==UserScript==
// @name Disable - remove onbeforeunload
// @namespace
// @description Disable - remove the annoying onbeforeunload event
// @include *
// @author netvisiteurs.com
// ==/UserScript==
var x = document.createElement('script');
x.type = 'text/javascript';
x.innerHTML = 'onbeforeunload = function() {};';
document.body.appendChild(x);