iframe嵌入获取cookie/localStorage数据跨域的解决方案
fuzuxian 9/4/2021 微前端
A项目嵌入B项目,
A项目:http://100.1.1.1:8088
B项目:http://100.2.2.2:8099/overview/index
定义B项目的标识符:projectBflag
# A项目
- iframe的src的ip和端口保持一致,B项目就可以获取cookie、localStorage数据,不存在跨域。
// 配置: A项目的ip和端口 + 标识词 + B项目的路由
<iframe src="http://100.1.1.1:8088/projectBflag/overview/index" width="1000px" height="600px"></iframe>
开发代理配置:
proxy: {
// 标识符--转发到B项目---为了请求到B项目的静态文件和配置文件
'/projectBflag': { target: 'http://100.2.2.2:8099', },
// ... B项目的后端接口代理设置
}
nginx代理配置:
location /projectBflag/ {
# 相当于访问 http://http://100.2.2.2:8099/projectBflag/,保留后缀
proxy_pass http://http://100.2.2.2:8099/;
}
# 允许iframe嵌套
X-Frame-Options: sameorigin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# B项目
// 配置静态文件请求路径
publicPath: '/projectBflag',
outputDir: 'dist',
assetsDir: 'static',
//配置文件放置路径: public/config.js 请求配置文件方式不需要改变
const getConfigurableVariable = () => axios.get('/config.json');
// 这样打包变成
<script src=/projectBflag/static/js/chunk-elementUI.d51a30d0.js></script>
// 而打包之后的静态文件、配置文件的目录为:-- 注意静态文件
dist/static/js/chunk-elementUI.d51a30d0.js
dist/config.js
// nginx 代理配置---/projectBflag/static/---只针对静态文件
location ^~ /projectBflag/ {
rewrite ^/projectBflag/(.*) /$1 last;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
后端接口代理
- 如果B项目后端接口代理和A项目配在一起,则复制之前给A
- 如果B项目后端接口代理不和A项目配在一起,依然配置在B自己的nginx中,则B项目axios需要设置路径前缀为projectBflag
axios.create({ baseURL: '/projectBflag', })
1