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>
Foi útil?

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;
    }
}

Demonstração.

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;">
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top