解决微前端qiankun子项目引用外链js跨域问题

121 阅读1分钟

最近在微前端项目中遇到了一个坑点: 在子工程项目中html<head><script>脚本引用外链js文件失败, 出现了跨域问题 Access to fetch at 'https://**.js' from origin 'https:**' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. image.png 子项目脚本引用如下

image.png

【解决方案】由于在子工程下该脚本是能正常运行的,所以考虑是与主工程域名跨域了,遂将脚本文件放在主工程进行引入,引入后的确解决了跨域的问题。不过也产生了新的问题,

image.png 该脚本将sdk函数挂载在window全局对象下,而微前端由于js沙箱隔离,在子应用中根本无法访问主工程的window.sdk函数,需将该函数传递进子工程应用,代码如下:

在主工程注册应用中的props传递函数

registerMicroApps([
    {
      name: 'app',
      container: '#app',
      activeRule: '/app',
      entry: 'http://localhost:5000/',
      props: {
        // 讲sdk函数传递给子应用
        SdkTool: window.SdkTool,
      },
    }
])

在子工程项目的mount函数中写入window:

export async function mount(props) {
  // 主工程sdk函数引入
  window.SdkTool = props.SdkTool
  ...
}