electron 版本为 16.0.3 ,在 react 组件内发起请求,会因为 CSP 策略而被拦截,如图
但是 html 中已经设置了 CSP 策略
<meta http-equiv="Content-Security-Policy" content="connect-src 'self' http://localhost:3022 'unsafe-eval';">
依然不顶用,创建 BrowserWindow 的地方配置了 webSecurity 为 false 也不行,查了一圈完全没查到有效的办法,各位大哥救一救小弟
1
murmur 2021-12-06 15:29:54 +08:00
跨域是服务器设置的,网页端不管用,得接口设置允许跨域才行
|
2
murmur 2021-12-06 15:32:31 +08:00
你访问的接口里有 Content-Security-Policy 么
|
3
ShibanuDrill OP @murmur 我这个不是报的 CORS 错误,是 CSP(内容安全策略),而且 electron 可以直接把同源策略关掉的
|
4
kidonng 2021-12-06 15:35:12 +08:00 via Android
用 webRequest.onHeadersReceived 修改 responseHeaders 里的 CSP
|
5
ShibanuDrill OP @kidonng 大佬,我改了后还是一样的报错,麻烦你看一下,这个是写在主进程的入口处的
``` session.defaultSession.webRequest.onHeadersReceived( { urls: ["http://localhost:3022/*"], }, (details, callback) => { details.responseHeaders["Content-Security-Policy"] = [ "connect-src 'self' http://localhost:3022 'unsafe-eval';", ]; callback({ cancel: false, responseHeaders: details.responseHeaders }); } ); ``` |
6
mxT52CRuqR6o5 2021-12-06 15:52:12 +08:00
jsonp 吗?
|
7
ShibanuDrill OP @mxT52CRuqR6o5 没有,就是用 axios 发的请求
|
8
ghylcg 2021-12-06 16:17:44 +08:00
electron 9.0 以后的版本 webSecurity 为 false 这个参数已经没有作用了
|
9
duan602728596 2021-12-06 16:35:14 +08:00
不如换 got 或者 node-fetch 请求算了
|
10
ShibanuDrill OP @duan602728596 应该不是请求库的原因吧
|
11
slime7 2021-12-06 16:49:13 +08:00
axios 的话,用 preload 暴露出 node 的 http 然后在渲染端切换 adapter 吧,这样发请求都通过 node 的 http 发
preload ```js import axiosHttpAdapter from 'axios/lib/adapters/http'; contextBridge.exposeInMainWorld('axiosHttpAdapter', axiosHttpAdapter); ``` renderer ```js axios.defaults.adapter = window.axiosHttpAdapter; ``` |
12
ShibanuDrill OP 难道没有人在用较新的版本时,在渲染线程里面发请求遇到这个问题的吗😂
|
13
yuningWang8 2021-12-06 16:55:18 +08:00
index.html 里设置一下 csp 规则?
|
14
yuningWang8 2021-12-06 16:56:31 +08:00
|
15
ShibanuDrill OP @slime7 就是在主线程的入口处执行上面这一段暴露 http ,然后在渲染线程中更换吧,好像挺靠谱的,等会试一下
|
16
ShibanuDrill OP @yuningWang8 设置过了,图片下面的那段 meta 的代码就是
|
17
slime7 2021-12-06 17:02:42 +08:00
@ShibanuDrill 不是主线程暴露,是 preload 里面暴露,搜一下用法吧
|
18
duan602728596 2021-12-06 17:03:57 +08:00
@ShibanuDrill 我的意思是,你现在用的请求库走的是浏览器环境的,你可以试试用 node 的请求库,node 环境就没有这么多限制了
|
19
yuningWang8 2021-12-06 17:06:39 +08:00
@ShibanuDrill 报错不是说你的 connect-src 设置错误了吗?所以用了 default-src 的默认值。
|
20
oott123 2021-12-06 17:11:06 +08:00 via Android
有一点需要注意,html 设置的 CSP 无法设置得比 response header 中的更宽松。
|
21
ShibanuDrill OP 用了 11L 的方案可以了,谢谢大佬和各位🙏
|
22
lx000377 2021-12-06 17:45:28 +08:00
试了下 没发现你这个问题 electron15.3
![]( https://s2.loli.net/2021/12/06/FeTrDE1fac9Ss3t.png) |
23
DrakeXiang 2021-12-06 21:49:14 +08:00
好像听说 axios 里面很多兼容浏览器的代码,在 electron 上会有问题
|