代码之家  ›  专栏  ›  技术社区  ›  Mark Carpenter

阻止用户使用“X”关闭浏览器窗口?

  •  0
  • Mark Carpenter  · 技术社区  · 16 年前

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

    我当前捕获窗口的OnUnload事件。我怎样才能做到这一点?

    window.onunload = function() { alert("unloading"); }
    
    5 回复  |  直到 16 年前
        1
  •  6
  •   rmeador    16 年前

    你为什么要这样做?如果你告诉我们你想做什么,我们可能会帮助你想出一个不需要这个的不同设计。

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

        2
  •  4
  •   Ates Goral    16 年前

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

    要回答您的问题,您可能无法区分浏览器的“取消”按钮和“X”按钮。 对话 . 他们最终都会返回 false .如果您需要这种级别的控制,您应该考虑编写自己的模拟对话框(lightbox),而不是真正的javascript对话框。或者看看现有的框架/插件,它们带有模式对话框,可以为您提供所需的控制量。

        3
  •  3
  •   SQLMenace    16 年前

    如果他按ALT+F4怎么办?

        4
  •  2
  •   Christian Nunciato    16 年前

    据我所知,您无法通过单击“取消”按钮或[X]按钮来检测用户是否关闭了对话框,因为除了返回操作结果(例如,confirm()为true/false)外,这两个按钮都不会对您公开。

    您可以挂接document.onbeforeunload事件以执行您所需的任何清理操作;我自己通过向服务器发送一个异步xmlhttp请求来完成此操作,以确保正确清理用户的会话。

        5
  •  0
  •   epascarello    16 年前

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

    最好的办法是在卸载之前使用onbeforeload,并学习如何处理服务器端的会话超时以清除数据。