1

语境 :

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

问题 :

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

测试 :

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

你有一些想法来解决这个问题吗?

BR

4

1 回答 1

0

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

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

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

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

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

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

于 2013-06-17T20:48:16.523 回答