在微前端中往往需要实现多对多的双向通信模式,例如微应用之间实现通信,主应用和微应用之间实现通信,因此使用发布 / 订阅模式是一种不错的选择。如果微应用和主应用处于同一个全局执行上下文,那么可以利用 window 变量实现通信,因为 window 实现了 EventTarget 的通信接口,例如常见的 single-spa,它会将应用的生命周期通过 EventTarget (window.dispatchEvent)的形式广播出来,从而可以使得 qiankun 实现监听处理。
// 主应用
window.addEventListener("microChannel", (e) => {
console.log("main addEventListener: ", e);
window.dispatchEvent(
new CustomEvent("mainChannel", {
detail: "main",
})
);
});
// iframe 子应用1(加载以后立马触发)
window.parent.addEventListener("mainChannel", (e) => {
console.log("micro1 addEventListener: ", e);
});
window.parent.dispatchEvent(
new CustomEvent("microChannel", {
detail: "micro1",
})
);
// iframe 子应用2
window.parent.addEventListener("mainChannel", (e) => {
console.log("micro2 addEventListener: ", e);
});
window.parent.dispatchEvent(
new CustomEvent("microChannel", {
detail: "micro2",
})
);
如果主子应用存在同源策略问题可使用postMessage解决