svg-sprite-loader 节点挂载错误
问题描述
即使微前端通过 ProxyWindow 和 ShadowDOM 隔离了 App 的 js 和 css, 但是 App 的 svg-sprite-loader 还是会将 svg 节点挂载到全局的 body 上。不符合预期。
问题原因
排查后发现,Platform 中 svg-sprite-loader 会在 window 上设置一个 __SVG_SPRITE__ 变量,然后将挂载节点设置为 body。
当 App 执行的时候,发现 window 上有 __SVG_SPRITE__ 变量,就会直接使用 platform 中设置的挂载节点。
解决方案
以上问题出现的原因是,platform 在 window 上设置了一个变量,但是 app 能访问这个变量。理论上两者应该是隔离的,各自设置各自的才是最合理的。但是实际上还是将 platform 当做基座来处理,也就是 app 在加载时克隆 platform 的一份环境。
解决方案是,在 window 代理时,将 __SVG_SPRITE__ 这个变量进行特殊处理,将其当做隔离变量,让 app 无法访问 platform 的这个变量。
