【问题标题】:Waiting event before closing window using onbeforeunload使用 onbeforeunload 关闭窗口前等待事件
【发布时间】:2013-06-04 15:47:15
【问题描述】:

上下文:

我开发了一个需要身份验证的应用程序。此应用程序使用事件与服务器对话。当服务器应答时,一些事件被发送到客户端(UI)。

问题:

当用户关闭页面时,需要在服务器上进行注销。使用我的架构,很容易调用执行此注销的方法。但我希望用户在关闭网页之前显示注销进度。事实上,我只想在收到特定事件(例如:disconnection_success)时关闭网页。 此外,不要启动另一个网页非常重要,因为当注销成功时,在第一个网页上会收到事件。 (因为对话框完成抛出 XMLHttpRequest)

测试:

我已经使用 onbeforeunload 进行了一些测试,但似乎很难自定义弹出窗口。

你有解决问题的想法吗?

BR

【问题讨论】:

    标签: javascript events onbeforeunload


    【解决方案1】:

    这有一些问题,但你在正确的轨道上。你是对的,你应该使用 onbeforeunload 因为它是你可以在关闭浏览器窗口时触发的唯一事件。 (我知道您可以使用 onunload 但此时您没有时间做任何事情。)这里的问题是您要执行多少代码。 onbeforeunload 在开始卸载页面之前不会给您太多时间。

    顺便说一句,onbeforeunload 有两种不同的场景:

    • 如果您在 onbeforeunload 事件中返回一个字符串,它会创建您所指的弹出窗口。这里的问题是,使用弹出窗口,您将没有足够的时间来执行代码
    • 另一个选项是不返回任何东西。相反,请调用您的注销方法。这应该让您的代码有足够的时间在关闭之前执行

    我实际上有一个与此非常相似的问题并最终自己解决了:How to logout during onbeforeunload/onunload using Javascript

    在您的问题中,您声明希望在他们注销时显示进度条。当用户关闭浏览器时,这是不可能的。在他们关闭窗口的那一刻,您已经失去了所有控制权,除了在 onbeforeunload (和 onunload 但不要使用它)中,这就是您的代码需要在那里执行的原因。话虽如此,您可以锚定您的注销按钮(我假设您的应用程序上有一个)并让它显示进度条。

    想想如果你确实有这种控制会发生什么 - 当用户试图关闭他们的浏览器窗口时,你可以在其中弹出窗口和进度条。您可以弹出任何内容并限制用户使用任何可靠的功能。这就是为什么它被编程为 onbeforeunload(和卸载)事件是唯一可能访问浏览器关闭的事件。这些事件有一些非常严格的指导方针,以防止任何可能的误用。我了解您遇到的问题,我在那里并且很臭,但是如果您要使用 onbeforeunload,我认为这是您唯一的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多