berial 久违更新:沙箱逃逸

有没有人在啊,想请问下,berial 久违更新:沙箱逃逸
最新回答
改天忘记你

2026-10-31 13:51:10

大家好,我是132。今天,我想与大家分享一个来自未来公司的小哥哥向我提出的问题。他问我:webpack代码切割生成的js/css是否能够实现沙箱隔离?

这是一个经典的问题,我们称之为“沙箱逃逸”。简而言之,就是在沙箱内运行的js尝试插入外部js,从而实现逃逸。这个问题让人感到棘手,但解决之道却相对明确。

解决沙箱逃逸问题有两种主要思路。一种是通过劫持createElement等方法,防止script插入外部。这正是qiankun所采用的方式。在fard中,我也是通过Proxy来劫持DOM操作,并将其传送到主线程。然而,这种方法要求有严格的封装,否则很容易成为一种case-by-case的hack行为。

另一种解决思路是使用MutationObserver来检测document对象,监控对当前shadow dom以外的操作,然后在下一个tick时将其塞入沙箱运行。这种方法的实现相对简单,过程也不需要像qiankun那样过于复杂。

总的来说,berial的沙箱在理论上几乎完美。它提供了强大的隔离机制,避免了代码间的相互干扰。然而,随着技术的发展,一些新的提案逐渐取代了传统的方法,但这并不意味着berial失去了其价值。作为一个前端开发者,我们在运行时阶段能做的事情有限,但berial这套代码依然具有意义。

我曾写过一篇关于当前市面上微前端解决方案的文章,提到了berial和qiankun等思路的微前端。尽管这些方案最终被新的提案所替代,但我依然为选择了berial而感到自豪。因为,在运行时阶段,我们能做的不多,但berial为我们提供了一个强有力的工具。

最后,我想分享berial的GitHub链接:berialjs/berial。对于对微前端感兴趣的朋友们,可以随意探索并使用。