单击mailto链接时防止调用onbeforeunload

时间:2009-11-17 13:54:05

标签: mailto onbeforeunload

无论如何都要防止在点击chrome中的mailto链接时调用onbeforeunload。 在FF,Safari,IE中工作正常。

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

2 个答案:

答案 0 :(得分:5)

解决方法怎么样?

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

Demo

答案 1 :(得分:1)

这是一个看似合理的建议解决方案

http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/


更新(链接已死) - 从Google缓存中复制的内容

如何使用带表单提交按钮的onbeforeunload

2009年9月23日 - Geekery

在做一些编程时,我遇到了一个有趣的困境。虽然我理解让用户很难离开页面是邪恶的,但我不是在争论onbeforeunload的优点(或缺乏)。

在特定表单上,我们强制浏览器不缓存信息以避免潜在的AJAX / JavaScript问题,如果他们应该离开表单并返回,因为浏览器并非所有行为都相同(例如,IE留下复选框但是不记得由于JavaScript而导致页面发生的更改。因此,我们警告用户他们即将离开订单时让他们知道他们需要再次填写订单。

功能很简单:

window.onbeforeunload = function () {
    return "You are about to leave this order form. You will lose any information...";
}

不幸的是,如果用户提交的表格显然不是我们想要的,也会触发这个。在互联网上搜索后,我遇到了一个我认为可以分享的简单解决方案:

// 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...";
    }
}

由于onclick在点击提交按钮之前似乎在onsubmit之前注册,我们可以在提交按钮中添加一个小变量声明,以便在表单提交发生之前将submitFormOkay设置为true:

<input type="submit" id="submit_button" onclick="submitFormOkay = true;">