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

2 回答 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;
    }
}

演示

于 2009-11-17T14:22:41.960 回答
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;">
于 2011-02-21T15:22:47.400 回答