使用onbeforeunload关闭窗口之前的等待事件

时间:2013-06-04 15:47:16

标签: javascript events onbeforeunload

背景:

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

问题:

当用户关闭页面时,需要在服务器上注销。使用我的架构,可以轻松调用执行此注销的方法。但我希望用户在关闭网页之前显示注销进度。实际上,我只想在特定事件(例如:disconnectction_success)被收到时才关闭网页。 此外,不发布其他网页非常重要,因为在注销成功时在第一个网页上收到了事件。 (因为对话框已完成抛出XMLHttpRequest)

测试:

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

你有什么想法来解决这个问题吗?

BR

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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