我们有一个管理门户网站,我们的老师在注销和/或关闭浏览器窗口之前经常忘记下载最新的PDF说明。我环顾四周但找不到我要找的东西。
我想实现以下目标:
在用户关闭浏览器窗口之前,系统会提示“您是否记得下载表单?”有两个选项,是/否。如果是,请关闭,否则返回页面。
在用户点击“退出”按钮之前,会提示他们使用与上面相同的内容。
我在第一次使用非常基本的代码(不适用于浏览器关闭)是:
<!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事件,然后是浏览器提示。有什么想法吗?
答案 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>