69

是否可以使用退出按钮阻止用户关闭窗口[X]?我实际上在页面中提供了一个关闭按钮,供用户关闭窗口。基本上我要做的是强制用户填写表格并提交。我不希望他们在提交之前关闭窗口。

我非常感谢您的评论,我不打算在任何商业网站上托管。这是内部的事情,我们实际上正在让所有员工参与我们设计的这项调查......

我知道这不是正确的方法,但我想知道我们在这里遇到的问题是否有解决方案......

4

8 回答 8

132

看看onBeforeUnload

它不会强迫某人留下,但会提示他们询问他们是否真的想离开,这可能是您可以管理的最佳跨浏览器解决方案。(如果您尝试离开中间答案,则类似于此站点。)

<script language="JavaScript">
    window.onbeforeunload = confirmExit;
    function confirmExit() {
        return "You have attempted to leave this page. Are you sure?";
    }
</script>

编辑:大多数浏览器不再允许为onbeforeunload.

请参阅2016 年 2 月 18 日的此错误报告。

在现代 Web 上,onbeforeunload 对话框用于两件事:

  1. 防止用户无意中丢失数据。
  2. 骗取用户。

为了在不停止前者的情况下限制它们对后者的使用,我们将不显示网页提供的字符串。相反,我们将使用通用字符串。

Firefox 已经这样做了[...]

于 2010-02-09T15:12:17.107 回答
14

如果您不想显示所有事件的弹出窗口,您可以添加条件,例如

window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (isAnyTaskInProgress) {
           return "Some task is in progress. Are you sure, you want to close?";
        }
    }

这对我来说很好

于 2015-07-15T07:27:22.520 回答
10

当用户按 ALT + F4 或从任务管理器中关闭它时,你会怎么做

如果他们没有在 cookie 或 DB 中完成,你为什么不跟踪,当他们下次访问时,只需带回相同的屏幕......:顺便说一句..你还没有完成填写此表格...... "

当然,如果您在互联网泡沫破灭之前就在附近,您会记得色情风暴,如果您关闭 1 个窗口,其他 15 个窗口将打开..所以是的,有代码可以检测窗口关闭,但如果您按 ALT + F4 两次,它将关闭孩子和父母(如果是弹出窗口)

于 2010-02-09T15:01:04.620 回答
6

这将弹出一个对话框,询问用户是否真的想关闭或留下一条消息。

var message = "You have not filled out the form.";
window.onbeforeunload = function(event) {
    var e = e || window.event;
    if (e) {
        e.returnValue = message;
    }
    return message;
};

然后,您可以在提交表单或使用其他内容之前取消设置它

window.onbeforeunload = null;

请记住,这非常烦人。如果您试图强迫您的用户填写他们不想填写的表格,那么您将失败:他们会找到关闭窗口的方法,并且永远不会回到您的卑鄙网站。

于 2010-02-09T15:15:46.837 回答
4

如果您发送需要公司员工 100% 参与的内部调查,那么更好的方法是让表单跟踪响应者 ID/用户名/电子邮件等。每隔几天左右发送一个不错的向您组织中的人员发送电子邮件提醒以完成调查……您甚至可以自动执行此操作。

于 2010-02-09T15:17:11.687 回答
4

那个怎么样?

function internalHandler(e) {
    e.preventDefault(); // required in some browsers
    e.returnValue = ""; // required in some browsers
    return "Custom message to show to the user"; // only works in old browsers
}

if (window.addEventListener) {
    window.addEventListener('beforeunload', internalHandler, true);
} else if (window.attachEvent) {
    window.attachEvent('onbeforeunload', internalHandler);
}
于 2012-01-23T05:35:10.660 回答
1

强迫用户做他们不一定想做的事情是不好的做法。您永远无法真正阻止他们关闭浏览器。

但是,您可以通过div在当前网页上创建一个类似的效果来覆盖其余控件,以便您的表单是唯一可访问的内容。

于 2010-02-09T15:01:58.660 回答
0

那么您可以使用window.onclose事件并false在事件处理程序中返回。

function closedWin() {
    confirm("close ?");
    return false; /* which will not allow to close the window */
}
if(window.addEventListener) {
     window.addEventListener("close", closedWin, false);
}

window.onclose = closedWin;

代码取自该站点

另一方面,如果他们强制关闭(通过使用任务管理器或这些行中的东西),您将无能为力。

于 2010-02-09T14:59:09.910 回答