【问题标题】:Prompt User before browser close?在浏览器关闭之前提示用户?
【发布时间】:2010-05-27 16:55:29
【问题描述】:

我们有一个管理门户,我们的老师经常忘记在注销和/或关闭浏览器窗口之前下载他们最新的 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>

编辑 - 新问题

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

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

【问题讨论】:

  • 据我所知,关闭浏览器是无能为力的。
  • @Pointy - 我需要找到一个示例站点,但我确定这存在。
  • 哇,也许你是对的——“onbeforeunload”对我有用。

标签: javascript popup browser-close


【解决方案1】:

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

【讨论】:

  • 哎呀——只有一个问题,当他们点击链接实际下载表格时,页面认为他们正试图离开并反过来向他们显示错误消息!
  • 另外 - 我希望发生一个或另一个事件,但不一定同时发生。 IE。他们点击“注销”按钮,他们会看到 OnClick 事件,然后是浏览器提示。有什么想法吗?
  • evt 对象可以告诉您点击了什么(即evt.targetwindow.event.srcElement,具体取决于浏览器)。因此,在他们点击表单的情况下,您可以选择不执行任何操作。
  • 它没有在 chrome 上显示自定义消息。显示默认消息您所做的更改可能不会保存。
  • 在 Chrome 中,这仅在您刷新浏览器时才有效。
【解决方案2】:

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

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

“if”语句中的测试只有在已经存在处理函数时才会为真。该测试并不意味着“窗口对象是否具有'onbeforeunload'属性?”。它的意思是,“当前窗口的'onbeforeunload'属性不为空吗?”。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我并不是要阻止他们离开,只是指出一条脚本消息并让他们选择“是或否”
    • @JM4:我知道,但如果有可能,一个邪恶的网站可以做到。由于是/否的情况是相当常见的情况,因此使用字符串的技巧使其成为可能。
    【解决方案4】:

    Pointy 对浏览器关闭事件的看法是正确的——想象一下,如果恶意网站可以阻止您关闭他们的窗口?因此,您无法阻止他们关闭您的网站,但您可以发出警报。

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

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

    【讨论】:

    • 认为我是对的,但事实证明,即使在关闭浏览器窗口时,Firefox 和 IE 也会遵守“beforeunload”约定。但是,用户确实可以选择让它关闭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多