Javascript 浏览器关闭前提示用户?

Javascript 浏览器关闭前提示用户?,javascript,popup,browser-close,Javascript,Popup,Browser Close,我们有一个管理门户,我们的老师经常忘记在注销和/或关闭浏览器窗口之前下载他们最新的PDF说明。我已经到处找了,但找不到我要找的东西 我想实现以下目标: 目标1 在用户可以关闭浏览器窗口之前,系统会提示他们“您是否记得下载表单?”以及两个选项,是/否。如果是,请关闭,如果否,请返回页面 目标2 在用户可以单击“注销”按钮之前,系统会提示用户使用与上述相同的方法 我对最基本的代码(不适用于浏览器关闭)的第一步是: 无标题文件 函数init(){ if(window.addEventListener

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

我想实现以下目标:

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

目标2 在用户可以单击“注销”按钮之前,系统会提示用户使用与上述相同的方法

我对最基本的代码(不适用于浏览器关闭)的第一步是:


无标题文件
函数init(){
if(window.addEventListener){
addEventListener(“beforeunload”,unloadMess,false);
}else if(window.onbeforeunload){
window.onbeforeunload=卸载;
};
}
函数unloadMess(){
var User_Message=“[Your User Message here]”
返回用户消息;
}
你好,这是我的网站
编辑-新问题 以下提供的解决方案可行,但也有其自身的问题:


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

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?');"

Pointy关于浏览器关闭事件的说法是正确的——想象一下,如果邪恶的网站可以阻止你关闭他们的窗口??所以你不能阻止他们关闭你的网站,但你可以发出警告

就您的注销按钮而言,这更直接:

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

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

else if(window.onbeforeunload) {
  window.onbeforeunload = unloadMess;
};
“if”语句中的测试只有在已经有处理函数的情况下才为真。该测试并不意味着“窗口对象是否具有“onbeforeunload”属性?”。这意味着,“窗口的'onbeforeunload'属性当前是否不为空?”


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

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


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

据我所知,关闭浏览器是无能为力的。@Pointy-我需要找到一个示例站点,但我确信它确实存在。哇,也许您是对的-“onbeforeunload”我认为我是对的,但事实证明,即使浏览器窗口关闭,Firefox和IE都会遵守“卸载前”的约定。不过,用户确实可以选择让它关闭。我不是想阻止他们离开,只是指出一条脚本消息,允许他们选择“是或否”@JM4:我知道,但如果可能的话,一个邪恶的网站可以这样做。由于“是/否”是一个非常常见的情况,因此可以使用字符串的技巧。Yikes-只有一个问题,当他们单击链接实际下载表单时,页面认为他们试图离开,并反过来向他们显示错误消息!此外,我希望有一个或另一个事件发生,但不一定两者都发生。也就是说,他们点击“注销”按钮,出现OnClick事件,然后出现浏览器提示。有什么想法吗?
evt
对象可以告诉您单击了什么(即
evt.target
window.event.src元素
,具体取决于浏览器)。因此,如果他们点击了表单,你可以选择什么都不做。它不会在chrome上显示自定义消息。您所做的默认消息更改可能无法保存。显示。在Chrome中,仅当您刷新浏览器时,此选项才有效。
else if(window.onbeforeunload) {
  window.onbeforeunload = unloadMess;
};