Вопрос проверяет понимание архитектурных подходов к интеграции нескольких независимых одностраничных приложений (SPA) в единую экосистему.
Когда несколько SPA-приложений должны работать вместе, например, в портале или сложной панели управления, ключевая задача — обеспечить их коммуникацию и координацию без полного перезапуска страницы. Основные подходы различаются по степени связности и сложности реализации.
window.postMessage.Создадим простую глобальную шину событий, которую будут использовать все SPA на странице. Это позволяет приложениям публиковать и подписываться на события, не зная друг о друге напрямую.
// shared-event-bus.js
// Этот файл загружается на страницу до загрузки SPA
class EventBus {
constructor() {
this.listeners = {};
}
on(event, callback) {
if (!this.listeners[event]) this.listeners[event] = [];
this.listeners[event].push(callback);
}
emit(event, data) {
if (this.listeners[event]) {
this.listeners[event].forEach(cb => cb(data));
}
}
}
// Создаём глобальный экземпляр
window.globalEventBus = new EventBus();
// В SPA App 1 (например, панель уведомлений)
window.globalEventBus.emit('userLoggedIn', { userId: 123 });
// В SPA App 2 (например, чат)
window.globalEventBus.on('userLoggedIn', (data) => {
console.log('Инициализируем чат для пользователя:', data.userId);
// Инициализация чата...
});Этот подход хорош, когда нужно запустить полностью независимое стороннее приложение с максимальной изоляцией.
// host-app.html (основное приложение)
Вывод: Для быстрой интеграции с максимальной изоляцией используйте iframe. Для создания единого пользовательского опыта из независимо разрабатываемых частей выбирайте архитектуру микрофронтендов с общей шиной событий или Module Federation. Web Components подходят для создания переиспользуемых UI-компонентов, которые должны работать в разных фреймворках.