Javascript onUnload方法的问题

时间:2009-09-06 02:20:00

标签: javascript

我要求当用户点击浏览器的[X]按钮时,我应该给他们一条消息。

我使用JavaScript的onUnload方法完成了这项任务。

现在,即使我刷新页面,也会出现相同的消息!

为什么会如此以及如何克服?

代码在这里

<!DOCTYPE HTML PUBLIC“ - // W3C // DTD HTML 4.0 Transitional // EN”> < HTML>  < HEAD>   < script language =“javascript”>

功能消息()

{         警报(“你想离开吗?”);   }

< /脚本>  < / HEAD>

< BODY onUnload =“Message();”> < / BODY>< / HTML>

请帮忙

2 个答案:

答案 0 :(得分:6)

这是正确的行为:刷新页面包括卸载它然后再次加载它。

接近此类确认对话框的最佳方法是使用以下代码:

<script language="javascript" type="text/javascript">
window.onbeforeunload = function() {
    return "You have unsaved changes.";
}
</script>

如果您在尚未保存或发送邮件时尝试关闭某个页面,则会在GMail上看到这种机制。尝试刷新页面时仍会触发,因此确保只有在未保存的工作时才返回错误字符串非常重要。

请注意,我们无法保证onUnloadonBeforeUnload事件会触发,因为无法保证您的访问者甚至会启用JavaScript,因此您不应将其用于关于未得救的工作的友好提醒。

答案 1 :(得分:2)

遗憾的是,没有javascript事件可以检测到X按钮的点击(关闭浏览器)。我们最接近的是onunload或onbeforeunload事件。并且,是的,无论用户选择离开页面的方法如何,它们都会触发。是关闭浏览器,单击链接,输入其他URL还是重新加载页面。这就是你所发现的。

不知道这是否会解决您的问题,因为我们StackOverflowers不了解您的应用,但您可以创建类似于此的kludge:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head> 
<script type="text/javascript">
function Message()
{
    if (reallyExiting) alert("Are you sure you want to leave?");
}

</script>
</head>
<body onload="reallyExiting=true;" onunload="return Message();">
<a href="example.html" onclick="reallyExiting=false">Not really leaving</a>
<a href="http://www.someOtherSite.com">Really leaving</a>
</body>
</html> 

我知道这很粗糙,但您可以使用一些类似的变量来跟踪他们遇到或未击中的链接,视情况而定。

HTH。