Apesar do que alguns desses diálogos dizem, eles não podem fazer nada malicioso . Você sempre pode clicar em OK ou Leave Page para fechar a página ofensiva sem quaisquer consequências.
Se o diálogo for muito longo e os botões estiverem fora da tela , você pode pressionar Enter para confirmar o fechamento da página.
Se você não tiver um teclado (dispositivos touchscreen), use o bookmarklet abaixo ou consulte a resposta do SimpleSimon (Chrome apenas).
Agora, alguns detalhes.
Há apenas uma maneira de executar alguma ação quando uma página é fechada: através do % eventoonbeforeunload
. É claro que isso pode ser facilmente usado contra o usuário (por exemplo, quando ele tenta fechar uma página, ele abre sua cópia em uma nova janela), então é 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 deixar a página e um para ficar. A única coisa que uma página pode fazer com esse diálogo é definir seu texto. Botões e barra de título são imutáveis. Aqui está uma captura de tela do Firefox 3.6: ( muito versão antiga do Firefox)
Éclaroquequandovocêpermitequeaspessoasmostrempop-upscomqualquertextoeapenasbotõesOK/Cancel,vocêpodetercertezadequemaiscedooumaistardealgunscarasousarãovocê.
Na captura de tela acima, OK significa "Deixe esta página", mas a descrição personalizada sugere algo mais. Portanto, os navegadores alteraram as caixas de diálogo, por isso é mais difícil torná-las enganosas. Por exemplo, versões recentes do Firefox parecem ignorar o texto personalizado:
OChromemostraotextopersonalizado,massempreacrescentaumaperguntaperguntandoaousuáriooqueeledesejafazereosbotõesexplicitamentedeclaramsuasações:(masaindaépropensoàsmensagensde"vídeos de gatos"!)
AquiestáoInternetExplorer10,também"propenso a gatos":
OOpera12apenasignoraoeventoonbeforeunload
e,sevocêtentarfecharumaabacomoessa,eleseráfechadocomoqualqueroutro.EunãotesteioúltimoOpera,noentanto.
Então,pararesumirascoisasmaisimportantes:
- Aspáginasnãopodemmostrarcaixasdediálogocomqualquertexto.Ositepodepediraonavegadorparamostrarumacaixadediálogocomumtextopersonalizado,masonavegadorpodeignorá-locompletamente(Opera),usartextogenérico(Firefox)ouexplicitamentedizeroquevaiacontecer(Chrome,IE).
- Osdetalhesdacaixadediálogodependemdonavegadorquevocêestáusando,masosbotõessãosempreimutáveis.Seelesnãodisseremexplicitamentequaldelesfazoquê,entãoOKsignifica"deixar esta página" e Cancelar é "ficar aqui".
- Os sites não podem realizar 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 com vírus 135234 e o FBI não será informado de que você possui software ilegal em seu computador.
Você pode desativar o evento onbeforeunload
, se quiser, impedindo que as páginas peçam que você saia ou permaneça. Aqui está um userscript entre navegadores. (role para baixo se o link estiver morto)
Se você estiver em um site específico que mostra um pop-up malicioso e ainda tem medo de clicar em Deixar , é possível criar um bookmarklet para removê-lo. Clique com o botão direito na barra de favoritos, escolha Novo marcador (ou equivalente) e cole-o como um URL: (é apenas um código minifed do 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á removido temporariamente da página ativa.
Se você quiser testar como esses pop-ups aparecem em seu navegador ou testar o bookmarklet / userscript, crie um arquivo de texto com o código a seguir e salve-o como um arquivo .html
:
<html><body onbeforeunload="return 'My custom text.'">_</body></html>
Parece que o link userscript está morto agora, então aqui está uma cópia extraída de archive.org cache . Todo o crédito para o criador original do script.
// ==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);