点击mailto链接时防止触发onbeforeunload事件的调用

3

有没有办法在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个回答

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.


@Qwertiy Firefox怎么样?OP说在那里运行良好。 - robertc
在Firefox中点击mailto链接,标志设置为true,不会触发onbeforeunload事件。现在关闭页面:onbeforeunload被触发但被忽略。 - Qwertiy
@Qwertiy 在我的火狐浏览器中似乎正常工作,一旦我纠正了拼写错误。你是否知道火狐浏览器中onbeforeunload行为的最新更改 - robertc
https://jsfiddle.net/akz0j0L2/ - 点击mailto然后重新加载。在FF中,页面将被重新加载而无需确认,因为该标志已被抑制。 - Qwertiy
@Qwertiy 好的,我明白问题了。移除 else - robertc

1
这里有一个看起来合理的解决方案。

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


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

如何在表单提交按钮中使用onbeforeunload

2009年9月23日 - 极客技术

在编程过程中,我遇到了一个有趣的问题。虽然我知道让用户离开页面变得困难是不好的,但我不想争论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;">

链接已损坏...在2017年已经没有用了! - ForguesR
1
@ForguesR 我已经从Google缓存中复制了内容,现在它又有用了! - Paul C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接