防止onbeforeunload在点击邮件链接时被调用
问题描述:
是否有任何阻止在点击邮件链接时调用onbeforeunload被调用的问题。 在FF,Safari,IE它工作正常。防止onbeforeunload在点击邮件链接时被调用
<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:[email protected]?subject=test mail&body=Hello%20World">Mail Link</a>
</body>
</html>
答
解决方法是什么?
$(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。
答
这里是一个提出的解决方案看起来合理
http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/
UPDATE(链接是死的) - 从谷歌缓存复制的内容
如何使用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;">
Firefox怎么办? – Qwertiy 2016-03-21 13:24:07
@Qwertiy Firefox怎么样? OP说它在那里工作得很好。 – robertc 2016-03-21 14:55:50
单击FF中的mailto-link,flag设置为true,不会触发'onbeforeunload'事件。现在关闭页面:'onbeforeunload'被触发但被忽略。 – Qwertiy 2016-03-21 15:06:40