qiankun icon indicating copy to clipboard operation
qiankun copied to clipboard

[Bug]点击浏览器的后退、前进,导致子应用挂载失败,报错信息:application 'xxx' died in status SKIP_BECAUSE_BROKEN

Open EasonMar opened this issue 2 years ago • 16 comments

What happens?

  • application 'xxx' died in status SKIP_BECAUSE_BROKEN: [: Target container with xxx not existed while xxx mounting!
  • 说明:容器写在了路由页面,但是并未使用任何路由过渡效果,https://qiankun.umijs.org/zh/faq#application-died-in-status-not_mounted-target-container-with-container-not-existed-while-xxx-mounting 提到的解决方案对此问题无效

最小可复现仓库

复现步骤,错误日志以及相关配置

  1. 进入项目根目录, pnpm i 安装依赖
  2. pnpm dev 本地运行所有应用
  3. 浏览器访问 http://localhost:3000/ 主应用(默认为login页)
  4. 点击 To APP1 跳转到 容器页面, 并加载子应用
  5. 点击浏览器 回退 按钮, 回退到 login 页
  6. 点击浏览器 前进 按钮, 前进到 容器页面, 此时子应用加载失败

对比实验 & 观察

  1. 将主、子应的路由模式从 hash 换成 history, 则不存在以上问题
  2. 移除 Login.vue 内的 actions.setGlobalState, 则不存在以上问题
  3. 使用 Router.push<router-link> 进行跳转, 则不存在以上问题
  4. 据观察, 出现此异常在于:点击浏览器 前进 按钮时, 容器页面还未渲染出来, 就触发了 qiankun loader.js 中的 render 方法, 导致 render 方法内获取 container 失败
  5. 手动刷新浏览器页面后, 微应用可以正常加载

相关环境信息

  • qiankun 版本:v 2.7.0
  • 浏览器版本:Edge 103.0.1264.77 (正式版本) (x86_64)、Chrome 103.0.5060.114(正式版本) (x86_64)
  • NodeJS版本:v14.19.3
  • 操作系统:win10 64位、macOS10.14.6
  • 主、子应用均采用Vue3:vue3(3.2.31)、vue-router(4.0.14)、路由使用 hash 模式

EasonMar avatar Aug 08 '22 02:08 EasonMar

https://router.vuejs.org/zh/guide/migration/index.html#%E5%88%A0%E9%99%A4%E4%BA%86-%EF%BC%88%E6%98%9F%E6%A0%87%E6%88%96%E9%80%9A%E9%85%8D%E7%AC%A6%EF%BC%89%E8%B7%AF%E7%94%B1

https://github.com/EasonMar/qiankun-issue-demo/blob/6c4730a7f6e08b48324f519ef58d5b9d67b7fe41/packages/main/src/router/index.js#L11

gongshun avatar Aug 08 '22 07:08 gongshun

https://router.vuejs.org/zh/guide/migration/index.html#%E5%88%A0%E9%99%A4%E4%BA%86-%EF%BC%88%E6%98%9F%E6%A0%87%E6%88%96%E9%80%9A%E9%85%8D%E7%AC%A6%EF%BC%89%E8%B7%AF%E7%94%B1

https://github.com/EasonMar/qiankun-issue-demo/blob/6c4730a7f6e08b48324f519ef58d5b9d67b7fe41/packages/main/src/router/index.js#L11

跟这个没关系吧。。。去掉 * 问题一样存在

EasonMar avatar Aug 08 '22 09:08 EasonMar

是不是hash模式的问题?

LingKKKK avatar Aug 22 '22 02:08 LingKKKK

是不是hash模式的问题?

肯定跟 hash 模式 路由有关。问题是,如果非要用 hash 模式路由,该怎么解决呢。。。

EasonMar avatar Sep 23 '22 02:09 EasonMar

请问问题解决了吗?遇到一样的问题了,不过我是history路由

MinatoHikari avatar Nov 02 '22 04:11 MinatoHikari

分享一下我的解决方式,我使用的是hash模式, 报错之前我的url是这样:https:// ****/#login?a=b, 我把url改成https:// ****?a=b#login,然后点击前进后退就不报错了。具体原因目前未知。

feijihe avatar Feb 13 '23 02:02 feijihe

我也遇到类似的问题,这个问题解决了嘛

zhengyunsen avatar Jun 05 '23 08:06 zhengyunsen

我的是history路由,在子应用界面点击浏览器自带的后退后再点击前进,就打不开了 Uncaught Error: application 'web-exp' died in status NOT_MOUNTED: [qiankun]: Target container with #qiankun-container not existed while web-exp mounting!

Gengkaibo avatar Jun 05 '23 08:06 Gengkaibo

这个问题不打算解决了嘛

zhengyunsen avatar Jun 19 '23 11:06 zhengyunsen

我的处理方法是,把挂载的节点(#container)放在路由同级获取其他位置,避免在路由刷新之后,dom实例重新生成

...
<div#conainer />
<RouterView />
...

ybom77 avatar Jul 10 '23 07:07 ybom77

请问解决方案是什么呀,试了各种办法都无效

JasminieDeng avatar Nov 24 '23 03:11 JasminieDeng

解决了吗

hello-astar avatar Dec 12 '23 07:12 hello-astar

蹲下方案

z54749412 avatar Feb 21 '24 05:02 z54749412

mark 试了下demo,将主、子应的路由模式从 hash 换成 history,也会存在以上问题

只能把container 放在外面,和router-view同一级,微应用离开 container 元素也不移除

bobohuochai avatar Mar 19 '24 06:03 bobohuochai