electron --unsafely-treat-insecure-origin-as-secure 问题解决 navigator.mediaDevices = undefined

问题原因:

由于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生成自签名SSL证书最佳案例

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值