最近在微前端项目中遇到了一个坑点:
在子工程项目中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.
子项目脚本引用如下
【解决方案】由于在子工程下该脚本是能正常运行的,所以考虑是与主工程域名跨域了,遂将脚本文件放在主工程进行引入,引入后的确解决了跨域的问题。不过也产生了新的问题,
该脚本将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
...
}