我正在为jQuery使用类似咆哮的插件,向用户发送实时消息以共享网站上的活动。现在,我仅使用自用户上一次访问该网站以来发生的通知来更新用户。但是,当我在站点上打开多个选项卡时,由于轮询请求较长,因此只有某些选项卡会收到通知,因为一个选项卡可以在其他选项卡获得通知之前刷新通知。

实现通知系统的最佳方法是什么,其中每个选项卡将同时显示消息?也许还可以保持持久性,以便即使用户导航到另一个页面,通知也可以在页面上保留15秒钟?

谢谢。

最佳答案

您可以将window.localStorage对象用作选项卡/窗口之间共享的通知的缓冲区。
为了确保跨浏览器的兼容性,您还可以使用store.js库,而不是直接处理localStorage。

因此,您可以通过网络套接字或以任何其他方式将通知发送给客户端,处理程序会将通知推送到此缓冲区。
说这将是一个数组

[
    notification1,
    notification2
    // etc.
]


用户打开每个窗口(选项卡)时,应将其注册在localStorage中,例如:

{
    wnd_<timestamp_of_window1_onload_event>: 1
    wnd_<timestamp_of_window2_onload_event>: 1
}


在每个窗口(选项卡)中,您可以使用window.setInterval函数每隔N毫秒检查缓冲区以获取新的通知。
setInterval调用的函数将从缓冲区读取新通知并显示它们。
在window.onbeforeunload处理程序中,您将从localStorage中的Windows集合中注销当前窗口。并且,如果在当前窗口取消注册后窗口集合变为空,则可以清空通知缓冲区。
当然,这是一个简短的解决方案,也许您需要考虑在所有窗口关闭之前从缓冲区中删除已弃用(由所有窗口处理)的通知。

07-24 18:50
查看更多