javascript 仅在Web应用程序上强制一个选项卡(例如类似于WhatsApp和Google Messenger)

r3i60tvu  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(65)

我有一个严格的要求,只允许登录的用户在一个标签中打开我的Web应用程序。我注意到WhatsApp和Google Messenger的Web应用程序已经实现了这一点。例如,尝试在多个选项卡中打开这些应用程序(无论是在同一个浏览器,不同的浏览器,甚至不同的设备上)都会导致这些警告:


的数据



有人知道这是怎么做的吗?服务器和客户端之间必须进行某种同步,以确保只有一个选项卡处于打开状态。但这需要一个唯一的标签标识符,即can get quite complicated to build reliably。有人知道WhatsApp和Google Messenger是如何做到的吗?他们的技术似乎完美无瑕。

m1m5dgzv

m1m5dgzv1#

我不知道WhatsApp和Google Messenger是如何做到这一点的,但是如果你使用WebSockets(你的帖子有标签“websocket”,所以我假设,你这样做),每个标签都有它到服务器的单一连接,如果你的用户需要登录,你可以检查用户是否已经打开了到服务器的webosket连接。

zbdgwd5y

zbdgwd5y2#

我不知道什么是什么应用程序的网页或谷歌消息做,但我一直设法做到这一点与本地存储标记的标签,和即时通讯使用存储监听器听,如果有任何变化的本地存储,这些代码会做的是决定什么第一个标签要做的。
首先使用兰德函数将某个键分配给具有唯一ID的选项卡。

localStorage.initPage = rand();

字符串
它将在本地存储中创建一个名为“initPage”的键,然后添加存储侦听器,它将检测新选项卡是否正在创建新的“initPage”键

window.addEventListener('storage', function (e) {
if (e.key === "initPage") {
    // action
}
}, false);


希望有帮助。

相关问题