如何检测用户是否在同一会话中打开了多个窗口或选项卡?

New*_*ter 7 javascript

我想检测用户是否在同一会话中打开了多个窗口或标签,如果他这样做了 - 我想在屏幕上打印一个特殊信息.

这个限制只应该在一个特殊的URL中,所以如果用户打开两个带有URL的标签/窗口:http://page.com/limite.htm - 我想打印特殊信息.当用户打开两个带有网址的窗口/标签时:http://page.com/limite.htm和http://page.com/index.htm - 一切正常,我不会显示任何信息.

可能吗?谢谢.

gbu*_*any 4

我认为最好的方法是localStorage:

从上面的链接,关于localStorage:

对其他窗口/选项卡的可用性:在运行同一 Web 应用程序的一个浏览器的每个窗口和选项卡之间共享

因此,您可以在选项卡/窗口打开时设置一个条目,并在关闭时更改它。当另一个选项卡/窗口打开时,您首先检查此条目值。

显然您需要小心:例如,如果浏览器崩溃,它可能不会触发“关闭”部分,因此用户将无法打开新选项卡,即使没有打开任何选项卡(仍然localStorage存在!)。如果您有服务器会话,您可以要求用户再次登录(或再次运行您的身份验证过程),并重置此值。您还可以尝试使用sessionStorage条目来跟踪此类问题。从上面的链接,关于sessionStorage:

持久性:仅在其原始窗口或选项卡中存在。

此外,还有一种称为“跨窗口消息传递”的东西,它允许您在选项卡之间进行通信,但请检查您想要支持的浏览器是否支持它。