开发概述
微前端简介
微前端是一种多个团队通过独立发布功能的方式来共同构建现代化web应用的技术手段及方法策略。子应用按照指南做微前端改造后,可以在硬件开发工具链平台云服务(CraftArts IPDCenter)中独立运行。
工作原理
微前端采用的无界方案,利用“iframe”来实现js沙箱能力,下面详细介绍:
- 应用加载机制和js沙箱机制
将子应用的js注入主应用同域的“iframe”中运行,“iframe”是一个原生的window沙箱,内部有完整的history和location接口,子应用实例instance运行在“iframe”中,路由也彻底和主应用解耦,可以直接在业务组件里面启动应用。
- 路由同步机制
在“iframe”内部进行history.pushState,浏览器会自动的在joint session history中添加“iframe”的session-history,浏览器的前进、后退在不做任何处理的情况就可以直接作用于子应用劫持“iframe”的history.pushState和history.replaceState,就可以将子应用的url同步到主应用的“query”参数上,当刷新浏览器初始化“iframe”时,读回子应用的url并使用“iframe”的history.replaceState进行同步。
- iframe连接机制和css沙箱机制
采用webcomponent来实现页面的样式隔离,会创建一个自定义元素,然后将子应用的完整结构渲染在内部子应用的实例instance在“iframe”内运行,dom在主应用容器下的webcomponent内,可以实现两者的互联。通过代理“iframe”的document到webcomponent,可以实现两者的互联。将document的查询类接口:“getElementsByTagName”、“getElementsByClassName”、“getElementsByName”、“getElementById”、“querySelector”、“querySelectorAll”、“head”、“body”全部代理到webcomponent,这样instance和webcomponent就精准的链接起来。
当子应用发生切换,“iframe”保留下来,子应用的容器可能销毁,但webcomponent依然可以选择保留,这样等应用切换回来将webcomponent再挂载回容器上,子应用可以获得类似vue的“keep-alive”的能力。
- 通信机制
承载子应用的“iframe”和主应用是同域的,所以主、子应用天然就可以很好的进行通信,我们提供三种通信方式: