Vue 工程在 Chrome 浏览器打开,获取音频设备权限问题

目录

项目场景

问题描述

解决方案

方法一、网页使用https方式访问

方法二、修改浏览器安全配置(最直接、简单)


项目场景

VUE 工程中使用 navigator.mediaDevices.getUserMedia 方法调用音视频设备。


问题描述

Vue 工程在 Chrome 浏览器打开,无法获取音视频设备,控制台提示获取音频设备权限问题

Cannot read property getUserMedia of undefined


解决方案

方法一、网页使用https方式访问

视频会议调用 navigator.mediaDevices.getUserMedia 方法需要在 https 协议下才可以调用,于是需要解决 vue-cli 搭建的项目如何支持 https 访问。

Case 1、vue-cli2 项目

1. 生成本地证书

若本地已经安装 git 客户端(查看 git 安装方法),其中包括了 openssl 程序,可直接在项目文件目录打开 git bash 界面,输入以下命令:

① 在 build 文件夹下新建 cert 文件夹,在 cert 目录下打开 git bash 输入以下命令生成私钥 .key 文件

openssl genrsa -out privatekey.pem 1024

② 通过上面生成的私钥文件生成 CSR 证书签名,根据要求填写一些相关信息,可一路按回车即可

openssl req -new -key privatekey.pem -out certrequest.csr

③ 根据上述私钥文件和 csr 证书签名文件生成证书文件

openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem

完成上述步骤后,cert 目录下分别生成 certificate.pem(证书文件)、certrequest.csr(CSR证书签名)、privatekey.pem(私钥) 三个文件。

2. 修改项目中配置修改 webpack.dev.conf.js。新版 vue-cli 已经改用 webpack 的 devServer 来代替之前的 dev-server。

'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
/*---------添加以下2句,引入https和fs---------*/
const https = require('https')
const fs = require('fs')
/*---------添加以上2句,引入https和fs---------*/

const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)

const devWebpackConfig = merge(baseWebpackConfig, {
  module: {
    rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
  },
  devtool: config.dev.devtool,

  devServer: {
    clientLogLevel: 'warning',
    historyApiFallback: {
      rewrites: [
        { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
      ],
    },
    hot: true,
    contentBase: false, 
    compress: true,
    host: HOST || config.dev.host,
    port: PORT || config.dev.port,
    open: config.dev.autoOpenBrowser,
    overlay: config.dev.errorOverlay
      ? { warnings: false, errors: true }
      : false,
    publicPath: config.dev.assetsPublicPath,
    proxy: config.dev.proxyTable,
    quiet: true,
    watchOptions: {
      poll: config.dev.poll,
    },
    disableHostCheck: true,
    /*---------添加https配置---------*/
    https: {
      key: fs.readFileSync(path.join(__dirname, './cert/privatekey.pem')),
      cert: fs.readFileSync(path.join(__dirname, './cert/certificate.pem'))
    }
    /*---------添加https配置---------*/
  },
............................
以下代码省略

Case 2、vue-cli3 项目

使用 vue 脚手架 3.x 搭建的项目,配置开启 https 方法比较简单,在项目根目录下的 vue.config.js 文件中增加属性 https: true 即可。

// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'url',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },
    // 此处开启 https
    https: true
  }
}

方法二、修改浏览器安全配置(最直接、简单)

1、浏览器地址栏输入:

chrome://flags/#unsafely-treat-insecure-origin-as-secure

2、开启 Insecure origins treated as secure 
在下方输入栏内输入你访问的地址 url ,然后将右侧 Disabled 改成 Enabled 即可。

3、浏览器会提示重启(Relaunch),Relaunch 即可。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值