我正在为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集合中注销当前窗口。并且,如果在当前窗口取消注册后窗口集合变为空,则可以清空通知缓冲区。
当然,这是一个简短的解决方案,也许您需要考虑在所有窗口关闭之前从缓冲区中删除已弃用(由所有窗口处理)的通知。