**1. JS 沙箱原理 (ProxySandbox):**
Qiankun 会为每个子应用创建一个 Proxy 对象代理 window。
- **Active 状态**: 修改 window 属性时,实际修改的是 Proxy 上的 fakeWindow,同时记录修改。
- **Inactive 状态**: 卸载时,不需要还原 window,因为我们只修改了 fakeWindow。
*(LegacySandbox 和 SnapshotSandbox 是降级方案,原理是记录因为 Diff,卸载时还原)*
**2. 样式隔离:**
- **ShadowDOM**: 真正的强隔离,但 React/Vue 的事件代理机制在 ShadowDOM 下可能会有问题(事件冒泡被截断)。
- **Scoped CSS**: 类似 Vue 的 scoped,给子应用所有样式规则加一个 data-qiankun="app-name" 的前缀。这是目前最常用的方案。
**3. 为什么不用 iframe?**
- **UI 不同步**: iframe 内部弹出的 Modal 只能覆盖 iframe 区域,不能覆盖整个浏览器窗口。
- **URL 状态**: iframe 内部路由变化不会反映在主应用的 URL 上,刷新就丢。
- **通信**: postMessage 通信繁琐。