Вы можете использовать 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 вы отмените регистрацию текущего окна в коллекции windows в localStorage. И если коллекция окон стала пустой после отмены регистрации текущего окна, вы можете очистить буфер уведомлений.
Конечно, это краткое решение, может быть, вам нужно подумать об удалении устаревших (обрабатываемых всеми окнами) уведомлений из буфера до закрытия всех окон.