浏览器关闭前提示用户?

时间:2010-05-27 16:55:29

标签: javascript popup browser-close

我们有一个管理门户网站,我们的老师在注销和/或关闭浏览器窗口之前经常忘记下载最新的PDF说明。我环顾四周但找不到我要找的东西。

我想实现以下目标:

目标1

在用户关闭浏览器窗口之前,系统会提示“您是否记得下载表单?”有两个选项,是/否。如果是,请关闭,否则返回页面。

目标2

在用户点击“退出”按钮之前,会提示他们使用与上面相同的内容。

我在第一次使用非常基本的代码(不适用于浏览器关闭)是:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script type="text/javascript">
function init() {
    if (window.addEventListener) {
        window.addEventListener("beforeunload", unloadMess, false);
    } else if (window.onbeforeunload) {
        window.onbeforeunload = unloadMess;
    };
}

function unloadMess() {
    var User_Message = "[Your user message here]"
    return User_Message;
}
</script>
</head>

<body onload="init();">
     hello this is my site
</body>
</html>

编辑 - 新问题

下面提供的解决方案有效但也有其自身的问题:

当用户点击实际下载表单的链接时,页面会认为他们正试图离开,然后向他们显示错误消息!此外 - 我希望一个或另一个事件发生,但不一定两者都发生。即他们点击“注销”按钮,然后他们会看到OnClick事件,然后是浏览器提示。有什么想法吗?

4 个答案:

答案 0 :(得分:24)

2017年更新

所有现代浏览器不再支持自定义消息。

window.onbeforeunload = function(evt) {
   return true;
}

这个用于关闭标签:

window.onbeforeunload = function(evt) {
    var message = 'Did you remember to download your form?';
    if (typeof evt == 'undefined') {
        evt = window.event;
    }
    if (evt) {
        evt.returnValue = message;
    }

    return message;
}

并使用onClick事件注销按钮:

onClick="return confirm('Did you remember to download your form?');"

答案 1 :(得分:2)

我认为这可能是您问题的一部分:

else if(window.onbeforeunload) {
  window.onbeforeunload = unloadMess;
};

如果已经存在处理函数,则“if”语句中的该测试将仅为true。该测试并不意味着,“窗口对象是否具有'onbeforeunload'属性?”。这意味着,“窗口的'onbeforeunload'属性当前是否为空?”。

我认为直接为任何浏览器设置“onbeforeunload”都是安全的。

答案 2 :(得分:1)

您无法在onbeforeunload中发出警报或类似内容,您不能简单地返回false以使用户不会离开该页面,就像onclick等其他事件一样。这将使一个网站无法离开它。

然后你可以只返回一个字符串,然后浏览器会显示一个确认对话框,其中包含你的字符串,询问用户是否真的要离开。

答案 3 :(得分:0)

Pointy对于浏览器关闭事件是正确的 - 想象一下邪恶的网站是否会阻止你关闭他们的窗户?因此,您无法阻止关闭您的网站,但您可以发出警报。

就您的退出按钮而言,这更为直截了当:

<a href="logout.html" onClick="return confirm('Did you remember to download your form?');">Logout</a>