# [设计]wujie(iframe隔离沙箱+组件级微前端+状态保活缓解白屏)

@ps 先说好, 不要对iframe有偏见, Why Not Iframe (opens new window)

// iframe
隔离的太完美导致缺点也非常明显

1) 刷新页面会导致iframe的url状态丢失
2) 弹窗只能在iframe内部展示
3) 白屏时间太长 ==> 应用保活来缓解

# 限制

@ps 问题不大, 技术选型前就考虑到了
  • 路由跳转API繁琐
@ps hash模式下需要记忆各种跳转API, 烦死...

===
路由API, 居然因为主子应用的跳转方向不同而各式各样, 这谁能记得住... 

window.microApp.router.push({name: 'my-app', path: '/page1'}) // 已优化

在实践qiankun项目时, 我们子应用调用this.$tab.push({path: '/base/xxx/yyy'})
其实绑定的是主应用的router.push方法, 这样形式上统一多了, 根本不需要记忆的
// 弹框偏移
子应用padding-left菜单宽度

# API设计

  • iframe 路由同步机制
iframe的session-history

劫持iframe的history.pushState和history.replaceState
  • iframe 连接机制和 css 沙箱机制 @nice
@ps micro-app 好像也抄这条路了

子应用的实例instance在iframe内运行
dom在主应用容器下的webcomponent内

  • 无感知的降级处理 @nice

# 参考 @ref

子应用的实例instance在iframe内运行,dom在主应用容器下的webcomponent内
通过代理 iframe的document到webcomponent,可以实现两者的互联

===
路由同步机制

===
props 注入机制

window.parent 通信机制

去中心化的通信机制