Нажал «Выйти», а в соседней вкладке всё ещё открыт кабинет: кнопки живые, данные на месте. Обычно это чинят через localStorage: пишут туда значение, в других вкладках ловят событие storage, парсят строку и удаляют ключ.
const channel = new BroadcastChannel('auth');
// во вкладке, где нажали «Выйти»
channel.postMessage({ type: 'logout' });
// в остальных вкладках сайта
channel.onmessage = (e) => {
if (e.data.type === 'logout') redirect('/login');
};new BroadcastChannel('auth') открывает канал с именем auth. Вкладка, где нажали «Выйти», отправляет в него объект через postMessage. Остальные вкладки открыли канал с тем же именем и ловят этот объект в onmessage.
Объект уходит как есть, без JSON.stringify, и в хранилище после него ничего не остаётся.
Отправитель своё сообщение не получает, поэтому вкладку с кнопкой уводи на вход отдельно. Работает во всех браузерах, в Safari с версии 15.4.
🔥 — если было полезно
@glo_academy | #js_day