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

+0

Firefox怎么办? – Qwertiy 2016-03-21 13:24:07

+0

@Qwertiy Firefox怎么样? OP说它在那里工作得很好。 – robertc 2016-03-21 14:55:50

+0

单击FF中的mailto-link,flag设置为true,不会触发'onbeforeunload'事件。现在关闭页面:'onbeforeunload'被触发但被忽略。 – Qwertiy 2016-03-21 15:06:40

这里是一个提出的解决方案看起来合理

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;"> 
+0

Broken link ... 2017年没用! – ForguesR 2017-07-21 17:44:06

+1

@ForguesR我已经从Google缓存中复制了内容,因此它现在又有用了! – Coops 2017-07-24 07:57:46