这有一些问题,但你在正确的轨道上。你是对的,你应该使用 onbeforeunload 因为它是你可以在关闭浏览器窗口时触发的唯一事件。(我知道您可以使用 onunload 但此时您没有时间做任何事情。)这里的问题是您要执行多少代码。onbeforeunload 在开始卸载页面之前不会给您太多时间。
顺便说一句,onbeforeunload 有两种不同的场景:
- 如果您在 onbeforeunload 事件中返回一个字符串,它会创建您所指的弹出窗口。这里的问题是,使用弹出窗口,您将没有足够的时间来执行代码
- 另一种选择是不返回任何东西。相反,请调用您的注销方法。这应该让您的代码有足够的时间在关闭之前执行
我实际上有一个与此非常相似的问题并最终自己解决了:How to logout during onbeforeunload/onunload using Javascript
在您的问题中,您声明您希望在他们注销时显示一个进度条。当用户关闭浏览器时,这是不可能的。在他们关闭窗口的那一刻,您已经失去了所有控制权,除了在 onbeforeunload (和 onunload 但不要使用它)中,这就是您的代码需要在那里执行的原因。话虽如此,您可以锚定您的注销按钮(我假设您的应用程序上有一个)并让它显示进度条。
想想如果你确实有这种控制会发生什么——当用户试图关闭他们的浏览器窗口时,你可以在其中弹出窗口和进度条。您可以弹出任何内容并限制用户使用任何可靠的功能。这就是为什么它被编程为 onbeforeunload(和卸载)事件是唯一可能访问浏览器关闭的事件。这些事件有一些非常严格的指导方针,以防止任何可能的误用。我了解您遇到的问题,我在那里并且很臭,但我认为如果您要使用 onbeforeunload,这是您唯一的选择。