Bem, o mais simples é simplesmente substituir o script de páginas diretamente e reatribuir o evento a null
.
window.onbeforeunload = null;
Isso deve funcionar em qualquer lugar, a menos que eles sejam realmente mal-intencionados e continuem reatribuindo-os por conta própria. Nesse caso, um loop para manter a configuração null
provavelmente funcionará.
while(true) {
if (window.onbeforeunload != null) {
window.onbeforeunload = null;
}
}
Agora, esteja avisado, algumas páginas usam isso para sempre. Pegue a página de upload do YouTube: se você for embora durante um upload, talvez tenha perdido horas de progresso! Ou talvez um formulário da web que você está preenchendo, que você pode não querer preencher novamente, ou uma mensagem (fórum / e-mail) que você pode não querer redigitar. Com esse recurso, você está protegido.
Outro problema é qualquer página que use isso para algum propósito secundário, como salvar dados por AJAX. Eles podem usar esse evento para acionar a ação de salvamento e esperar que o usuário demore o bastante para clicar no botão para a solicitação passar. Novamente, isso geralmente é feito para salvá-lo de você mesmo.
Mas, obviamente, todos nós sabemos que muitas páginas usam isso para o mal. Portanto, se você souber de alguma página em que deseja trabalhar, poderá sempre 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 sejam necessárias.
Não há como (sem o conhecimento prévio de um determinado código de páginas) manter as boas ações ao interromper a caixa pop-up. Esta caixa não é uma alert()
. A caixa é gerada pelo navegador, conforme o comportamento pretendido de onbeforeunload
. Um cria isso fazendo qualquer função que eles atribuam a window.onbeforeunload
return uma string. Essa string será impressa no pop-up.
window.onbeforeunload = function() {
//Whatever
return "WARNING! You have unsaved changes that may be lost!";
}
Assim, você não conseguiria bloquear o pop-up sem apagar a função.
Além disso, se você encontrar uma maneira, qualquer AJAX falhará. O pop-up dá tempo para que as solicitações sejam concluídas, sem isso, os dados podem ser perdidos.
Quanto a onunload
, não deve ser possível bloquear você com isso. Uma vez que é disparado após a página é descarregada. Mas para estar seguro, você sempre pode fazer um window.onunload = null;
e ele deve ser cuidado.