有一个替代Javascript onUnload
?我使用 JSP Jakarta Struts 框架和 Servlets 。
我必须知道,窗口何时关闭,因为不所有人都点击了退出按钮 你如何在你的应用程序中处理它?
答案 0 :(得分:5)
一般来说,无法确定访问者是否仍在“使用”(或甚至查看)您的网页。一旦浏览器下载了页面,它就不再与服务器联系,因此页面可能会保持打开状态几秒钟或几年,服务器也不知道。
unload
事件肯定是一个有用的线索,因为在卸载页面时通常会触发。然而,它并不可靠。有很多情况下它不会触发,而且即使它会解雇你的服务器还有更多的东西仍然没有意识到它。
例如:浏览器(甚至操作系统)可能会崩溃,或者电源可能会耗尽。使用Wi-Fi的访问者可能会断开连接,或者在使用您的网站时将iPhone带入隧道。
这个标准的解决方法 - 我们都很容易承认这很糟糕 - 就是让访问者的会话超时。即使在高风险的银行网站上,你也会发现,如果你离开电脑四分钟然后回来,你仍然可以访问,但如果你走了五分钟就被锁定了。
此设置肯定会发现许多误报:访问者仍在使用您的页面而不与其进行交互的情况,因此超时会给您带来不便。它还允许误报:真实访问者已离开的情况,以及恶意用户在超时期限内接管。
我们最近看到的这个方案的唯一重要补充是利用JavaScript在超时期限之后明显地将用户注销。我们再次在银行网站上看到这一点:让页面打开太长时间,当你回来时,你会看到一个登录屏幕。 (当然,这也取决于JavaScript,因此仍然是错误的。)
不幸的是,由于HTTP是无状态协议,我们永远无法确定浏览器中发生了什么(特别是如果JavaScript关闭),所以我们可以使用廉价的解决方法。
答案 1 :(得分:0)
你应该知道Opera没有像你怀疑的那样执行onUnload。而且你不应该依赖javascript来查看用户是否关闭了Windows。
答案 2 :(得分:0)
我依靠servlet会话超时来自动处理注销。您可以在会话超时时注册处理程序,以涵盖您需要执行的任何凭据清理。这里给出了一个很好的例子:
http://www.xyzws.com/Servletfaq/when-do-i-use-httpsessionlistener/7
客户方无法保证用户将始终确认他们已完成使用您的网站。
答案 3 :(得分:0)
我使用onbeforeunload
。 See the documentation
经过测试,它似乎可以在 Firefox , Chrome , IE11 和 Edge 上运行。
我没有测试其他浏览器。(compatibility list is here)