很多人都知道,当您使用桌面版 Facebook 并收到通知时。
页面标题是
(1) 脸书
例如,您打开了 3 个 Facebook 选项卡,当时会显示
\ (1) 脸书 \ (1) 脸书 \ (1) 脸书 \
在您选择阅读通知的其中一个选项卡中,但在一瞬间,您的每个选项卡都会更新以删除
(1)
有人可以让我了解如何像 Facebook 那样在其他开放实例中强制更新吗?
很多人都知道,当您使用桌面版 Facebook 并收到通知时。
页面标题是
(1) 脸书
例如,您打开了 3 个 Facebook 选项卡,当时会显示
\ (1) 脸书 \ (1) 脸书 \ (1) 脸书 \
在您选择阅读通知的其中一个选项卡中,但在一瞬间,您的每个选项卡都会更新以删除
(1)
有人可以让我了解如何像 Facebook 那样在其他开放实例中强制更新吗?
最简单的方法是在每个选项卡上保持一个通道(WebSocket 或 SSE)打开。然后,当有新消息到达时,您只需将其广播给收件人拥有的所有连接,它将显示在每个选项卡中(假设每个页面都有 JS 来处理它)。
在这个问题中,还有多种其他方式可以在同源选项卡之间进行通信:Javascript;具有相同来源的选项卡/窗口之间的通信- 但我认为这不是您想要的,因为对于像 FB Messenger 这样的东西,您肯定需要实时通知,然后我的第一个建议要容易得多。
我选择使用 localStorage
在这里我可以初步检查是否chat
存在
if (localStorage.getItem("chat") === null) {
localStorage.setItem("chat","0");
}
然后我可以设置每秒的间隔来运行一个名为checkChat()
setInterval(checkChat, 1000);
使用该checkChat()
函数,我可以查看它是否等于0
,如果是,则删除(1)
标题中实际存在的值或任何值。
function checkChat(){
var chatNum = localStorage.getItem("chat");
//console.log(chatNum);
if (chatNum == "0"){
var actualpagetitle = $(document).attr('title');
var newtitle = actualpagetitle.replace(/^\(\d+\)\s+/,'');
document.title = newtitle;
}
}
我已经在我的实时站点上对此进行了测试,并且无论何时localStorage.getItem("chat")
更新它都会更新其余打开的窗口。