Impedir que o OnBeNoLload seja chamado ao clicar no link de e -mail para
-
20-09-2019 - |
Pergunta
De qualquer forma, existe para impedir que o OnBeUnload seja chamado ao clicar no link de e -mail para o Chrome. Em FF, Safari, ou seja, está funcionando bem.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
google.load("jquery", "1.3.2");
</script>
<script type="text/javascript">
$(document).ready(function(){
window.onbeforeunload = confirmExit;
});
function confirmExit() {
return "Are you sure?";
}
</script>
</head>
<body>
<a href="mailto:someone@somewhere.com?subject=test mail&body=Hello%20World">Mail Link</a>
</body>
</html>
Solução
Que tal uma solução alternativa?
$(document).ready(function(){
mailtoClicked = false;
window.onbeforeunload = confirmExit;
//Test if browser is Chrome
if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) {
$('a[href^=mailto]').click(function() {mailtoClicked = true;});
}
});
function confirmExit() {
if (!mailtoClicked) {
return "Are you sure?";
} else {
mailtoClicked = false;
}
}
Outras dicas
Aqui estão uma proposta de soluções que parecem razoáveis
http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/
Atualização (link está morto) - Conteúdo copiado do Google Cache
Como usar o OnBeSeunload com os botões de envio do formulário
23 de setembro de 2009 - Geekery
Enquanto fazia uma programação, me deparei com uma situação interessante. Embora eu entenda que é mau tornar difícil para um usuário deixar uma página, não estou aqui para discutir os méritos (ou a falta dela) do número de carga.
De uma forma específica, estamos forçando o navegador a não armazenar em cache as informações para evitar problemas potenciais de Ajax/JavaScript, se eles devem deixar o formulário e voltar, pois os navegadores nem todos agem da mesma forma (por exemplo, as caixas de seleção folhas verificadas, mas não Lembre -se de mudanças que ocorreram na página devido ao JavaScript). Como tal, alertamos nossos usuários quando eles estão prestes a deixar o formulário de pedido para que eles saibam que precisarão preenchê -lo novamente.
A função foi simples o suficiente:
window.onbeforeunload = function () {
return "You are about to leave this order form. You will lose any information...";
}
Infelizmente, isso também seria acionado se o usuário enviasse o formulário que, obviamente, não é o que queremos. Depois de pesquisar na Internet, me deparei com uma solução simples que pensei em compartilhar:
// Create a variable that can be set upon form submission
var submitFormOkay = false;
window.onbeforeunload = function () {
if (!submitFormOkay) {
return "You are about to leave this order form. You will lose any information...";
}
}
Como o OnClick parece se registrar antes do Onsubmit ao clicar em um botão Enviar, podemos adicionar uma pequena declaração variável ao nosso botão Enviar para que o SubmitFormOkay seja definido como TRUE antes que o envio do formulário aconteça:
<input type="submit" id="submit_button" onclick="submitFormOkay = true;">