问题原因:
由于electron mainWindow.loadURL(‘http:127.0.0.1’) 访问是已http协议,而chrome浏览器在访问http请求时考虑隐私安全是无法打开许多Web API的(如:navigator.mediaDevices),你会发现 navigator.mediaDevices = undefined
问题如下:
https://github.com/electron/electron/issues/15298
由上连接可知以前的解决方法为:
app.commandLine.appendSwitch('unsafely-treat-insecure-origin-as-secure', 'http://127.0.0.1')
可是electron现在的官方文档内已不支持unsafely-treat-insecure-origin-as-secure属性
chrome浏览器内可调用navigator.mediaDevices的请求方法有:
localhost 域
开启了 HTTPS 的域
使用 file:/// 协议打开的本地文件https
由此看来我们只能使用https来请求对应数据了
可是我需要请求的是http://127.0.0.1
怎么才能时它变成https://127.0.0.1
解决方法:
OpenSSL生成自签名SSL证书域名设置127.0.0.1
OpenSSL怎么下载呢!下面是我下载的方式
winows运行cmd执行以下命令
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
scoop install openssl
生成后证书如下:
接下来就是服务端启动https服务
如下:
koa配置https最佳案例
import https from 'https'
import Koa from 'koa'
import path from 'path'
import fs from 'fs'
import app from 'app'
import sslify from 'koa-sslify'
const app = new Koa();
...
//强制将http转https
app.use(sslify())
const options = {
//这里的路径写法因人而异
key: fs.readFileSync(path.resolve('src/server/cert/server.key')),
cert: fs.readFileSync(path.resolve('src/server/cert/server.crt'))
};
//开启https服务
https.createServer(options, app.callback()).listen(3000)
大功告成我们运行一下electron项目吧
mainWindow.loadURL('https:127.0.0.1')
结果问题来了:
NET::ERR_CERT_AUTHORITY_INVALID
这是啥,翻译成中文就是ERR证书授权无效
为啥证书会无效呢,答案是: 你自己生成的当然是无效的!
那怎么解决这个问题呢!
答案来了!
还记得electrion官方文档的app.commandLine.appendSwitch
方法吗
//添加命令开关: (忽略证书相关的错误)
app.commandLine.appendSwitch('ignore-certificate-errors')
app.on('ready', createWindow) //这个写在最下面
现在是真的ok啦 运行 electrion
打印如下结果:
那axios怎么忽略ssl证书相关错误问题呢
axios解决方法:
import https from 'https'
import axios from 'axios'
const axios = axios.create({
'https://127.0.0.1:3000',
httpsAgent: new https.Agent({
rejectUnauthorized: false //忽略ssl证书相关错误
})
})
//请求
axios.get('/data') //200