Muitas páginas têm alertas quando você as deixa: se você fechar as guias, navegar sem salvar, etc., há várias razões pelas quais um site o alertaria / impedia de sair até que você confirmasse um alerta, por exemplo, "Tem certeza de que deseja sair desta página? ".
Isso geralmente é feito com os manipuladores onbeforeunload
e / ou onunload
.
Aqui está um exemplo.
Existe alguma maneira de impedir alertas / eventos de bloqueio de usuários gerados por esses manipuladores? Basicamente, gostaria de deixar o JS ativado e, especificamente, não permitir coisas que me impediriam de sair de uma página sem que um clique extra acontecesse.
onbeforeunload
e os onunload
manipuladores ainda devem disparar; eles simplesmente não devem fazer coisas que bloqueiam o usuário. Isso significa que não há alertas nem operações que demoram mais do que alguns segundos.
Encontrei alguns plugins que editam / greasemonkey corrigem o javascript para páginas específicas e brincamos um pouco com o código deles para tentar torná-los mais aplicáveis universalmente. No entanto, espero encontrar uma solução que funcione em qualquer página que tente bloquear a saída do usuário.
fonte
onbeforeunload
) funcionarão apenas para páginas que usamonbeforeunload
, não para páginas que usam um dos outros métodos para anexar eventos.Respostas:
Bem, a coisa mais simples a fazer é simplesmente substituir diretamente o script das páginas e atribuir novamente o evento
null
.Isso deve funcionar em qualquer lugar, a menos que sejam realmente maliciosos, e continue atribuindo-os novamente. Nesse caso, um loop para manter a configuração
null
provavelmente funcionará.Agora, esteja avisado, algumas páginas usam isso para sempre. Veja a página de upload do YouTube: se você sair durante o upload, poderá ter perdido horas de progresso! Ou talvez um formulário da web que você esteja preenchendo, que talvez você não queira preencher novamente, ou uma mensagem (fórum / email) que você não queira redigitar. Com esse recurso, você está protegido.
Outra questão é qualquer página que use isso para fins secundários, como salvar dados pelo AJAX. Eles podem usar esse evento para acionar a ação de salvar e esperam que o usuário demore o suficiente para clicar no botão da solicitação. Novamente, isso geralmente é feito para salvá-lo de si mesmo.
Mas, obviamente, todos sabemos que muitas páginas usam isso para problemas. Portanto, se você souber de alguma página em que deseja trabalhar, sempre poderá ter um sistema de lista branca. Realmente não há uma maneira de bloquear essa ação, sem bloquear totalmente
window.onbeforeunload
, e quaisquer ações (possivelmente boas) que ela possa executar .Não há como (sem o conhecimento prévio de um determinado código de página) manter as boas ações enquanto para a caixa pop-up. Esta caixa não é uma
alert()
. A caixa é gerada pelo navegador, conforme o comportamento pretendido deonbeforeunload
. Um cria, fazendo qualquer função que eles atribuam parawindow.onbeforeunload
retornar uma string. Essa sequência será impressa no pop-up.Portanto, você não conseguiria bloquear o pop-up sem apagar a função.
Além disso, se você encontrasse uma maneira, qualquer AJAX falharia. O pop-up fornece tempo para as solicitações passarem, sem ela, os dados podem ser perdidos.
Quanto a
onunload
, não deve ser possível bloquear você com isso. Uma vez que é acionado após o descarregamento da página. Mas, para estar seguro, você sempre pode fazer umwindow.onunload = null;
e deve ser resolvido.fonte
onbeforeunload
manipulador fizesse outra coisa importante? Por exemplo, o que se fez uma breve solicitação AJAX ou comprometeu algo no armazenamento HTML5 local? Existe uma maneira de impedir que osonbeforeunload
manipuladores façam determinadas chamadas (ou sejaalert()
) ou funcionem por mais de um determinado período de tempo? É por isso que perguntei sobre uma extensão em vez de apenas um script do tipo greasemonkey: parece que, para fazer isso corretamente, teria que haver algo alterado no nível do mecanismo JavaScript.fonte
Existe uma boa ferramenta que pode lidar com qualquer pop-up irritante em um sistema Windows - ClickOff . Você pode baixá-lo aqui . Eu verifiquei e funciona com o alerta "Alterações que você fez não podem ser salvas" no site do SharePoint.
fonte