Skip to content

svg-sprite-loader 节点挂载错误

问题描述

即使微前端通过 ProxyWindowShadowDOM 隔离了 Appjscss, 但是 Appsvg-sprite-loader 还是会将 svg 节点挂载到全局的 body 上。不符合预期。

问题原因

排查后发现,Platformsvg-sprite-loader 会在 window 上设置一个 __SVG_SPRITE__ 变量,然后将挂载节点设置为 body

App 执行的时候,发现 window 上有 __SVG_SPRITE__ 变量,就会直接使用 platform 中设置的挂载节点。

解决方案

以上问题出现的原因是,platformwindow 上设置了一个变量,但是 app 能访问这个变量。理论上两者应该是隔离的,各自设置各自的才是最合理的。但是实际上还是将 platform 当做基座来处理,也就是 app 在加载时克隆 platform 的一份环境。

解决方案是,在 window 代理时,将 __SVG_SPRITE__ 这个变量进行特殊处理,将其当做隔离变量,让 app 无法访问 platform 的这个变量。