Skip to content

子应用 js 资源加载完成之前就 unmount,会导致 js 加载完成后逃逸 with 沙箱 #1606

@chenhuang444

Description

@chenhuang444

问题描述

  1. 加载子应用时,如果某个 js 文件还未加载完成,该 micro-app 就被卸载 unmount
  2. js 文件会继续加载,并执行该 js 文件。

这时因为 with 沙箱已被停用了,所以对 window的操作会逃逸到主应用

复现步骤

  1. host 加载 micro-app
  2. micro-app 通过 react lazy 动态加载其他组件 LazyComp
  3. host 通过 fetch 配置,延迟 LazyComp 的请求
  4. host 将该 micro-app 卸载掉
  5. LazyComp 文件加载时,设置 window.onclick = () => { conole.log('xxx') }
  6. 在窗口上随意点击,会触发上面的 console.log

上传截图

ae470c8c-4603-415c-a559-4948ef7d0179.mp4

复现仓库

https://github.com/chenhuang444/micro-app-example/tree/demo/unmount-escape-sandbox
branch: demo/unmount-escape-sandbox
在根目录:

pnpm install
pnpm dev

环境信息

子应用使用 rsbuild 是因为 vite 直接用了 esm import 加载,不太方便通过 fetch 拦截

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions