【问题标题】:Prevent a user from closing a browser window using "X"?防止用户使用“X”关闭浏览器窗口?
【发布时间】:2010-10-01 10:44:08
【问题描述】:

我能否使用 javascript 判断用户是否单击了浏览器对话框上的“X”图标,或“确定”/“取消”按钮?我有代码需要在窗口关闭时运行,但它只会在单击“确定”或“取消”时运行。

我目前正在捕获窗口的 onunload 事件。我怎样才能做到这一点?

window.onunload = function() { alert("unloading"); }

【问题讨论】:

  • 我认为这个问题有些混乱。您是在寻找浏览器还是通过单击“X”关闭的对话框?
  • 请注意onbeforeunload 可能会更好,但是如果单击按钮应该生成 AJAX 保存,则需要使用 jQuery 附加到该按钮,执行 AJAX,并在完成 AJAX ,执行 window.location 以强制重定向到另一个页面。

标签: asp.net javascript html


【解决方案1】:

据我所知,您无法检测用户是否通过单击“取消”按钮或 [x] 按钮关闭了对话框,因为除了返回操作结果(例如,确认() 为真/假)。

您可以挂接到 document.onbeforeunload 事件以执行您需要的任何清理操作;我自己通过向服务器发送异步 XMLHTTP 请求来确保用户的会话得到正确清理。

【讨论】:

    【解决方案2】:

    如果我理解正确,您的问题是关于浏览器对话框,而不是主浏览器窗口

    要回答您的问题,您可能无法区分浏览器对话框的“取消”按钮和“X”按钮。他们最终都会返回一个false。如果您需要这种级别的控制,您应该考虑编写自己的模拟对话框(灯箱)而不是真正的 JavaScript 对话框。或者也许看看现有的框架/插件与模态对话框,给你你需要的控制量。

    【讨论】:

    • +1 - 我喜欢这个答案。您已经绕过了问题措辞所带来的混乱,并抓住了关键词——“对话”……
    【解决方案3】:

    不可能捕捉到浏览器的关闭并处理所有其他也会导致回发的事件。你可以尝试,很多人在你之前都失败了。

    最好的办法是使用 onbeforeunload 并学习如何处理服务器端的会话超时以清理数据。

    【讨论】:

      【解决方案4】:

      如果他按 ALT + F4 会怎样?

      【讨论】:

      • 或者如果用户拔掉了他们机器上的插头。您不能依赖客户端通知您此事件。
      • 您能否编辑您的答案以包括班迪和 Outlaw 的 cmets?他们将帮助证明这是不可能的。
      【解决方案5】:

      您为什么要这样做?如果您告诉我们您正在尝试做什么,我们或许可以帮助您提出不需要这样做的不同设计。

      但是,要回答您的问题:不可能在所有情况下都捕捉到该事件。您不能阻止用户关闭浏览器或保证您的代码会在他们关闭时执行。您可以让他们稍微烦人,但他们可以禁用 javascript,或终止进程,或重新启动计算机。使用 unload 函数是最接近在窗口关闭时运行的一些代码(它会在正常关闭或用户导航离开的情况下运行)。

      【讨论】:

      • @Pwninstein:正如 rmeador 所说,但换句话说:即使你能弄清楚如何做,你也不应该尝试。如果您想做的事情有任何合法性,我们将很乐意为您提供帮助。有关于网络如何工作的指南和约定;如果您想与用户“搞乱”,请不要这样做。
      • 这是一个我之前正在处理的普通 ASP.NET 窗口。我不是想和任何人“混”。我只是想指导对话框的流程(即强制他们使用我提供的按钮)。不过,我找到了一种方法来做这样的事情。感谢您的意见!
      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 2018-07-30
      • 2016-07-11
      • 1970-01-01
      • 2020-06-06
      • 2012-04-25
      • 1970-01-01
      • 2015-07-02
      相关资源
      最近更新 更多