Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

建议兼容模式下一个子应用只使用一个iframe #17

Open
jieyou opened this issue Jul 28, 2022 · 6 comments
Open

建议兼容模式下一个子应用只使用一个iframe #17

jieyou opened this issue Jul 28, 2022 · 6 comments

Comments

@jieyou
Copy link

jieyou commented Jul 28, 2022

在兼容模式下,是不是没有必要让html和css运行在一个iframe内,js运行在另一个iframe内,直接让它们都运行在同一iframe内是最贴近原生和风险最小的方案

@jieyou jieyou changed the title 兼容模式下一个子应用只使用一个iframe 建议兼容模式下一个子应用只使用一个iframe Jul 28, 2022
@yiludege
Copy link
Collaborator

yiludege commented Jul 28, 2022

这是个好问题,无界最早的兼容模式就是直接丢一个iframe让子应用去运行,但是发现存在一些问题:

现在运行js的iframe沙箱是隐藏起来放在body下面,不随子应用切换而销毁(内存常驻),如果把dom也放到iframe里面,势必这个iframe需要挂载到具体页面上,一旦切换页面整个iframe就会销毁,所以子应用切换的体验(白屏时间)就会很差和直接使用iframe效果差不多,并且会丧失预执行和保活等能力

所以最后决定采用dom iframe + js iframe的方案,这样的好处就是除了dom的弹窗不能够弹到全局,其他所有的能力和非兼容模式保持一致

@anuoua
Copy link

anuoua commented Aug 1, 2022

说一下我的看法,对于保活这个可能并不是硬需求,我个人现在并不希望常驻内存,而且弹出到全局这点我觉得很重要。
是否考虑可以让用户自己选择呢? @yiludege

@yiludege
Copy link
Collaborator

yiludege commented Aug 1, 2022

如果不常驻内存,那么子应用切换必然是白屏严重,我当时是这么考虑这个问题的
1、现在大部分前端框架都开始不支持ie这样的浏览器,也就是降级的这个case是越来越少的
2、如果都放到一个iframe内的话,弹窗还是不能全局,感觉效果和直接放一个<iframe src= "子应用url”>差不多,那么在这个场景用户还不如直接放个iframe
3、 要支持弹窗全局势必要将子应用的dom直接渲染在主应用节点上,然后框架层面还需要添加scope来做隔离,这个和乾坤的处理一致,子应用mount到指定$el上,兼容模式和非兼容模式用户还需要再代码层面做不同的区分,和收益比起来成本很高
现在的兼容模式和非兼容模式用户不用做任何区分,除了弹窗不能全局,其他所有的保持一致

@Hollelihanqi
Copy link

我看 demo 上 弹窗是可以全局的,为什么你们又说不能全局
image

@yiludege
Copy link
Collaborator

yiludege commented Aug 7, 2022

@Hollelihanqi 这个指的是降级场景哈,可以将降级开关打开,之后弹窗就无法弹出来了

@kvchen95
Copy link

kvchen95 commented Sep 8, 2022

既然弹出全局不需要直接使用 iframe 不就更好了吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants