初次使用 electron,在本地使用node起了后台服务后,打包成exe程序安装成功,但是无法调通http://localhost:8080/api接口,又试了 http://127.0.0.1:8080/api,问题依旧没有解决。
排查后,发现代码没有任何问题。思索再三,觉得还是跟域名限制或端口限制有关。然后大概确认是受同源策略限制了,经过查阅文档,发现可通过配置 webSecurity属性来关闭同源策略限制。
然后,问题解决。
import { app, BrowserWindow } from 'electron'
mainWindow = new BrowserWindow({
webPreferences: { webSecurity: false }
})
electron 官方文档 - browserwindowoptions
众所周知,electron的架构为:
electron = chromium + nodejs + native API
我想了一下,如果使用 nodejs 或者native net 发送网络请求,是可以完美规避跨域问题的。
但是由于我使用的是 react 的框架,集成了electron方案,接口调用使用的是 umi-request,所以本质上还是通过chromium媒介发送出来的请求,受到了同源策略限制。这是问题所在!
这两种发送请求的方式,都不受浏览器同源策略的影响。