如何阻止用户在javascript中关闭窗口?

man*_*j82 46 javascript anti-patterns javascript-events

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

伙计们,我非常感谢你的评论,我不想在任何商业网站上托管.内部事情,我们实际上让所有员工参与我们设计的这项调查....我知道它不是正确的方式,但我想知道我们在这里遇到的问题是否有解决办法......

Poo*_*ool 95

看看onBeforeUnload.

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

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

编辑:大多数浏览器不再允许自定义消息onbeforeunload.

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

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

为了限制他们使用后者而不停止前者,我们将不显示网页提供的字符串.相反,我们将使用通用字符串.

Firefox已经做到了[...]

  • *在Opera中握拳*. (18认同)
  • @FrancescoMM您可能想要确认某个用户想要关闭某个页面的各种可能原因,以便他们不会意外地执行此操作. (14认同)
  • 1.6%的人不会因对话而烦恼,询问他们是否要关闭窗口?认真考虑转换到Opera并成为现在1.603%的一部分.. (7认同)
  • 现在这不是那么糟糕! (6认同)

SQL*_*ace 8

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

如果他们没有在cookie或数据库中完成它,你为什么不跟踪他们下次访问时只是带回同一个屏幕...:BTW ..你还没有完成这个表格填写... "

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

  • 首先,当然这种"特征"不应该被滥用.总是有可能需要确认/推迟的行动是关键和/或时间敏感的.例如,网上银行.我提交了一份"支付"交易,用于今天需要启动的付款.我显示了一个评论/确认页面,我可以在其中"编辑","确认"或"取消".我切换到另一个浏览器选项卡,然后无意中关闭了浏览器.我需要显示银行页面,并告诉我需要确认.等到下周我再开一次付款时并不理想. (3认同)

Ima*_*mam 7

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

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

这对我来说很好

  • 我已经在IE8,Firefox和Chrome上测试过,它运行正常. (2认同)

alu*_*lun 6

那个怎么样?

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);
}
Run Code Online (Sandbox Code Playgroud)


Gip*_*ing 5

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

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;
};
Run Code Online (Sandbox Code Playgroud)

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

window.onbeforeunload = null;
Run Code Online (Sandbox Code Playgroud)

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

  • 你在第 3 行有一个类型,它应该是 `var e = event || 窗口.事件` (2认同)