> Как организовать общение между двумя вкладками одного приложения в браузере? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: RecruitTech, HolyWeb
Стек: JavaScript
> Пример ответа
Для организации общения между двумя вкладками одного приложения в браузере можно использовать несколько подходов. Наиболее распространённые:
-
BroadcastChannel API - современный и простой способ. Создаёте канал с одинаковым именем в обеих вкладках, отправляете сообщения через
postMessage, а на другой стороне слушаете событиеmessage. Пример:JAVASCRIPT// Вкладка 1const channel = new BroadcastChannel('app_channel');channel.postMessage({ type: 'UPDATE', data: 'hello' });// Вкладка 2const channel = new BroadcastChannel('app_channel');channel.onmessage = (event) => {console.log(event.data);}; -
localStorage - через событие
storage. Когда одна вкладка изменяет данные вlocalStorage, другие вкладки (в том же origin) получают событие. Недостаток - данные остаются в хранилище, нужно чистить вручную.JAVASCRIPT// Вкладка 1localStorage.setItem('message', JSON.stringify({ text: 'hello' }));// Вкладка 2window.addEventListener('storage', (event) => {if (event.key === 'message') {console.log(JSON.parse(event.newValue));}}); -
SharedWorker - более сложный, но мощный вариант. Создаёте воркер, который разделяется между вкладками, и через него передаёте сообщения. Подходит для сложной синхронизации состояния.
Рекомендую BroadcastChannel как самый простой и надёжный для большинства сценариев. Учтите, что он не поддерживается в старых браузерах (IE11), тогда используйте localStorage как fallback.
> Похожие задачи по frontend
Что такое bind в JavaScript и как им пользоваться для привязки контекста?
Является ли JavaScript однопоточным или многопоточным языком
Что происходит при обращении к переменной var и let до объявления в JavaScript
Как работает this внутри функции-конструктора и при обычном вызове функции в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью