iframe潜入的code-server与宿主页面通讯问题
背景
- 网页iframe嵌入了code-server web,两个网页是同站,现在需要code-server下在触发操作后发送消息给宿主页面。
需求细化
- code-server 进行定制UI,支持显示一些按钮,比如可以在顶部右侧工具栏
- code-server可以与宿主页面进行通讯
方案
首先需要知道code-server的限制,code-server extension是无法在title位置增加自定义按钮的。通过插件方案也只可以改变底部状态栏及左侧activity按钮
- 宿主页面元素绘制,通过定位移动到code-server处
- 该方案优势:不需要定制code-server,
- 弊端:code-server的title bar/布局控件是可以自由设置开关,如果关闭了,即显的很突兀,这样又需要watch编辑器中的显示变动
- code-server extension
- activitybar注册按钮或直接编辑器中增加右键菜单
- 注册Action
- 当点击菜单/按钮,Action执行发送消息到宿主页面服务端
- 服务端发送消息到宿主页面前端,进而执行相关动作
- 该方案优势:灵活
- 弊端:链路挺长
方案2细节
fetch请求,node下也内置fetch对象,因此fetch方案也可以让extension在code-server还是vsc均支持。但fetch方案并不双通。