如何阻止用户关闭Javascript中的窗口?

如何阻止用户关闭Javascript中的窗口?,javascript,dom-events,anti-patterns,Javascript,Dom Events,Anti Patterns,是否可以阻止用户使用退出按钮[X]关闭窗口?实际上,我在页面中提供了一个关闭按钮,让用户关闭窗口。基本上,我试图做的是强迫用户填写表单并提交它。我不想让他们在提交之前关上窗户 我真的很感谢你的评论,我不想在任何商业网站上托管。这是我们内部的事情,实际上我们正在让所有员工参与我们设计的调查 我知道这不是正确的方法,但我想知道我们这里遇到的问题是否有解决方案…您可以使用窗口。一旦关闭事件并在事件处理程序中返回false function closedWin() { confirm("clos

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

我真的很感谢你的评论,我不想在任何商业网站上托管。这是我们内部的事情,实际上我们正在让所有员工参与我们设计的调查


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

您可以使用
窗口。一旦关闭
事件并在事件处理程序中返回
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;
代码取自


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

当用户点击ALT+F4或从任务管理器关闭它时,您将怎么做

如果他们没有在cookie或DB中完成,你为什么不跟踪他们,下次他们访问时,只需将同一屏幕带回来…:顺便说一句,你还没有填写完这张表格…”


当然,如果你在互联网泡沫破裂之前,你会记得色情风暴,如果你关闭1个窗口,其他15个窗口将打开。因此,是的,有代码会检测到窗口关闭,但如果你按ALT+F4两次,它将关闭子窗口和父窗口(如果是弹出窗口)

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

不过,您可以通过在当前网页上创建一个
div
来实现类似的效果,该div覆盖了控件的其余部分,因此表单是唯一可访问的对象。

请查看

它不会强迫某人留下来,但会提示他们是否真的想离开,这可能是你能管理的最好的跨浏览器解决方案。(如果你试图中途离开,与本网站类似。)


window.onbeforeunload=确认退出;
函数confirmExit(){
return“您试图离开此页面。是否确定?”;
}
编辑:大多数浏览器不再允许在卸载前为
onbeforeunload

从2016年2月18日开始查看

onbeforeunload对话框用于现代Web上的两件事:
1.防止用户无意中丢失数据。
2.欺骗用户

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

Firefox已经做到了这一点[…]


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

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;

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

如果你发送的内部调查要求你的c如果是公司的员工,那么更好的方法就是让表单跟踪回复者的ID/用户名/电子邮件等。每隔几天左右,只需向组织中的员工发送一封漂亮的电子邮件提醒,以完成调查……您甚至可以将此自动化。

怎么样

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);
}

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

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

这对我来说很好

感谢上帝,答案是否定的。我不希望我的窗口试图强迫我提交一些表单。从可用性的角度来看,终止浏览器的进程是一种无法使用Javascript的方式,如果用户不想填写表单并出于任何原因离开/关闭窗口,该怎么办在你的网站上生锈并赶走用户?或者更糟糕的是,输入垃圾数据只是为了让窗口关闭?不要因为你发现这样做的网站令人厌恶而拒绝投票。提供一个建设性的替代方案,希望他能看到以其他方式这样做的好处。这个问题是合理的。@manraj82:许多现代调查系统MS可以一次一页地跟踪用户的进度。如果用户在中间中止,他们可以在他们完成的最后一个阶段后恢复。这也非常恼人。这是确保我不返回网站的一个好方法。我很同意。但是这比强迫我关闭一个任务管理器的浏览器要好。只需关闭恼人的标签就可以了。我很确定有很多预构建的调查系统已经能够做到这一点(不确定它们是否有很多$$,但这是另一个主题)。我们实际上依赖于这个预构建的调查系统,但事实证明它是无用的…所以我们想了一个更简单的方法,但无论如何,谢谢你的评论…这在Opera中不起作用,因为它不会在卸载事件之前启动。Opera是浏览器吗!!!!1.6%的人怎么能使用它!1.6%的人不会对对话框a感到恼火如果他们想关闭一个窗口,你会去屏蔽吗?认真考虑转换成Opera并成为现在1.603%@FrancescoMM的一部分。有各种可能的原因,你可能想确认用户想要关闭一个页面,这样他们就不会意外地关闭。关于这一点,我已经在IE8、Firefox和Chrome上进行了测试,这是可行的很好。首先,当然这类“功能”不应该被滥用。需要确认/延迟的操作总是有可能是关键的和/或时间敏感的。例如,网上银行。我提交了一个“billpay”交易
window.onbeforeunload = confirmExit;
    function confirmExit() {
        if (isAnyTaskInProgress) {
           return "Some task is in progress. Are you sure, you want to close?";
        }
    }