1

很多人都知道,当您使用桌面版 Facebook 并收到通知时。

页面标题是

(1) 脸书

例如,您打开了 3 个 Facebook 选项卡,当时会显示

\ (1) 脸书 \ (1) 脸书 \ (1) 脸书 \

在您选择阅读通知的其中一个选项卡中,但在一瞬间,您的每个选项卡都会更新以删除

(1)

有人可以让我了解如何像 Facebook 那样在其他开放实例中强制更新吗?

4

2 回答 2

1

最简单的方法是在每个选项卡上保持一个通道(WebSocket 或 SSE)打开。然后,当有新消息到达时,您只需将其广播给收件人拥有的所有连接,它将显示在每个选项卡中(假设每个页面都有 JS 来处理它)。

在这个问题中,还有多种其他方式可以在同源选项卡之间进行通信:Javascript;具有相同来源的选项卡/窗口之间的通信- 但我认为这不是您想要的,因为对于像 FB Messenger 这样的东西,您肯定需要实时通知,然后我的第一个建议要容易得多。

于 2013-08-19T11:14:56.850 回答
0

我选择使用 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")更新它都会更新其余打开的窗口。

于 2013-08-20T08:02:03.220 回答