Como impedir que uma página da Web navegue para longe usando JavaScript?
javascript
onbeforeunload
Entusiasta de software
fonte
fonte
Respostas:
O uso
onunload
permite exibir mensagens, mas não interrompe a navegação (porque é tarde demais). No entanto, o usoonbeforeunload
interromperá a navegação:Nota: Uma cadeia vazia é retornada porque os navegadores mais recentes fornecem uma mensagem como "Quaisquer alterações não salvas serão perdidas" que não podem ser substituídas.
Em navegadores mais antigos, você pode especificar a mensagem a ser exibida no prompt:
fonte
window.onbeforeunload = function() { return ""; }
Ao contrário de outros métodos apresentados aqui, esse trecho de código não fará com que o navegador exiba um aviso perguntando ao usuário se ele deseja sair; em vez disso, explora a natureza do evento do DOM para redirecionar de volta à página atual (e, assim, cancelar a navegação) antes que o navegador possa descarregá-lo da memória.
Como ele funciona com um curto-circuito direto na navegação, não pode ser usado para impedir que a página seja fechada; no entanto, ele pode ser usado para desativar o bloqueio de quadros.
Isenção de responsabilidade: você nunca deve fazer isso. Se uma página tiver um código de quebra de quadros, respeite os desejos do autor.
fonte
Acabei com esta versão um pouco diferente:
Em outros lugares, defino o sinalizador sujo como verdadeiro quando o formulário fica sujo (ou, caso contrário, desejo impedir a navegação). Isso me permite controlar facilmente se o usuário recebe ou não o prompt Confirmar Navegação.
Com o texto na resposta selecionada, você verá avisos redundantes:
fonte
undefined
O equivalente de uma maneira mais moderna e compatível com o navegador, usando as modernas APIs addEventListener.
Fonte: https://developer.mozilla.org/pt-BR/docs/Web/Events/beforeunload
fonte
event.returnValue
No exemplo de Ayman, retornando false, você impede que a janela / guia do navegador se feche.
fonte
O equivalente à resposta aceita no jQuery 1.11:
Exemplo JSFiddle
A resposta de altCognito usou o
unload
evento, que acontece muito tarde para o JavaScript abortar a navegação.fonte
Use onunload .
Para jQuery, acho que funciona assim:
fonte
unload
incêndios de evento quando o usuário é sair da página, ao contrário dobeforeunload
que dispara apenas de antemão (e pode ser cancelada)Essa mensagem de erro sugerida pode duplicar a mensagem de erro que o navegador já exibe. No chrome, as duas mensagens de erro semelhantes são exibidas uma após a outra na mesma janela.
No chrome, o texto exibido após a mensagem personalizada é: "Tem certeza de que deseja sair desta página?". No firefox, ele não exibe nossa mensagem de erro personalizada (mas ainda exibe a caixa de diálogo).
Uma mensagem de erro mais apropriada pode ser:
Ou no estilo stackoverflow: "Você começou a escrever ou editar uma postagem."
fonte
Se você estiver pegando o botão voltar / avançar do navegador e não quiser sair, pode usar:
Caso contrário, você pode usar o evento beforeunload , mas a mensagem pode ou não funcionar em vários navegadores e requer a devolução de algo que força um prompt interno.
fonte