berial icon indicating copy to clipboard operation
berial copied to clipboard

用户自定义的生命周期方法没有在沙箱内执行

Open asiainfoliwei opened this issue 3 years ago • 4 comments

image 如上图,当子应用生命周期方法有调用全局对象,直接访问的也是全局的对象

asiainfoliwei avatar Nov 25 '21 02:11 asiainfoliwei

感觉这块不需要在沙箱里运行,比如 mount 一般是 Fre.render(<App/>, document.getElementById("root")) 这里的 document 必须是全局 document

yisar avatar Nov 25 '21 02:11 yisar

感觉这块不需要在沙箱里运行,比如 mount 一般是 Fre.render(<App/>, document.getElementById("root")) 这里的 document 必须是全局 document

我提一个case呀,如果在生命周期里面需要访问子应用其他js之前定义的全局对象,是不是就访问不到了,第二个是 image 我看example都是主动把shadowdom root 传进去,如果生命周期函数也在沙箱里面执行的话是不是就可以改造是不是就可以小一点,proxy劫持domcument -> shadowdom root, 如果需要访问原始docuemnt可以在allowList加一个rowDocument

asiainfoliwei avatar Nov 25 '21 02:11 asiainfoliwei

proxy劫持domcument -> shadowdom root

这个是不现实的,document 和 shadow root 不是一个东西,我们之前也打算直接代理到沙雕上,但是 react 和 vue 这种框架对 document 的依赖比想象中的更多

fre 是可以的,因为 fre 只用了几个 document 的方法

你可以尝试一下,如果你能搞定的话,欢迎 pr

yisar avatar Nov 25 '21 10:11 yisar

我理解不用全部方法,把get dom节点的方法hack一份,就可以了,我看micro-app这边已经在用了 image

asiainfoliwei avatar Nov 26 '21 07:11 asiainfoliwei