大家都知道,当你在Facebook的桌面版上并收到通知时。
页面标题为
(1) Facebook
举个例子,你打开了Facebook的3个标签,此时会读取
''(1)Facebook
在其中一个选项卡中,您选择阅读通知,但在一瞬间,您的每个选项卡都会更新以删除
(1)
有人能告诉我如何像Facebook那样在其他开放实例中强制更新吗?
最简单的方法是在每个选项卡上打开一个通道(WebSocket或SSE)。然后,当新消息到达时,您只需将其广播给收件人拥有的所有连接,它就会显示在每个选项卡中(假设每个页面都有JS来处理它)。
在这个问题中,同样来源的选项卡之间还有各种其他通信方式:Javascript;同源标签页/窗口之间的通信-但我认为这不是你想要的,因为对于FB信使这样的东西,你肯定想要实时通知,然后我的第一个建议要容易得多。
我选择使用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")
,它都会更新其余打开的窗口。