electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

这篇文章是接我cocos专栏的上一篇文章继续写的,我上一篇文章写的是 cocos 开发触摸屏项目,需要嵌入一个网页用来展示,最后通过 electron 打包成 exe 程序,而且网页里面是需要调用电脑摄像头进行拍摄的。

问题

通过前一篇文章确实实现了cocos 中使用 webview 嵌入页面调用摄像头进行拍摄,并且使用 electron 打包后也是没有问题的,但是当时开发的时候忽略了一个问题,就是跨域和安全性的问题。

因为上一篇文章使用的测试页面,是我本地电脑启动的服务,使用 localhost 进行访问,所以一切正常,但是如果是其他电脑启动这个服务,用 ip 地址的方式进行嵌入访问,就是出现摄像头打不开的问题,别说让用户授权是否允许访问摄像头,它连弹这个框都不弹出来。

原因

原因是什么呢,其实不管是嵌入的 webview,像是普通的谷歌浏览器、edge浏览器这些,如果直接访问另一台电脑的 ip 打开需要使用摄像头的网页,也是连弹窗都不弹窗,直接失败!

这是浏览器的安全机制,像是摄像头、麦克风这种涉密隐私数据,要求必须是安全访问,也就是必须要通过 https 的方式才会弹窗询问用户是否允许这个网页访问电脑摄像头,如果是 http 的话,浏览器会直接自动拒绝,连询问用户都不会询问,所以直接打不开。当然了,如果是本机的 localhost 的方式访问还是询问的。

解决办法

1. chrome 谷歌浏览器

如果是用谷歌浏览器访问的话,倒是也简单,只需要单独配置一下,当然正式上线肯定没法用了,需要安装证书,把 http 改成 https 就不会遇到这个问题。如果是单纯测试一下的话,只需要修改一下电脑的浏览器设置就行。

在浏览器地址栏输入: chrome://flags,点击回车进入配置:

在这里插入图片描述

然后输入:unsafely,敲击回车,然后选择“已启用”,在输入框输入允许访问的网站地址,如果多个地址的话拿英文逗号分开。编写完他就保存了,然后需要重启浏览器才会生效哈!需要重新启动一下浏览器。

在这里插入图片描述

重启之后,他会在浏览器顶部显示这样一句话,表示配置好了。

在这里插入图片描述

看提示也知道,这是不安全的,自己测试可以,平时不要自己改哈!

保证配置的没有出现问题,这样的话,你再去访问那个需要调用摄像头的 http 网页就会提示你是不是允许授权它访问电脑摄像头了。

谷歌浏览器是这样,其实 edge 浏览器也可以这样配置,是一样的。

记住,用完了改回去!

2. electron 打包 webview 页面配置

就像我们上篇文章,是使用的 webview,最后是用 electron 打包的,这种情况下没有配置页面怎么办?

这个时候就需要去配置一下 electron。

首先在 electron 的 main.js 文件中添加下面这段代码就可以了。


const { protocol } = require('electron')
const { app } = require('electron')
 
 
protocol.registerSchemesAsPrivileged([
  {
    scheme: 'http',
    privileges:
    {
      standard: true,
      secure: true,
      bypassCSP: true,
      allowServiceWorkers: true,
      supportFetchAPI: true,
      corsEnabled: true,
      stream: true
    }
  }
])

app.commandLine.appendSwitch('unsafely-treat-insecure-origin-as-secure', ['http://192.168.78.12:8080'])

// 也可以设置全部  极其不建议!!!
// app.commandLine.appendSwitch('unsafely-treat-insecure-origin-as-secure', ['*'])

然后就可以了,但是这样做的话很危险,极其不建议这样操作!有很大很大的安全风险!!!

app.commandLine.appendSwitch 方法用于向 Chromium 的命令行参数添加自定义开关。代码段中,使用 unsafely-treat-insecure-origin-as-secure 开关,并将其值设置为一个包含单个元素 '*' 的数组。

这个开关的用途是允许开发者将不安全的源(通常是使用 HTTP 而非 HTTPS 的网站或应用)视为安全的。这通常用于开发环境,以便能够绕过浏览器对安全性的某些限制,这种行为非常不建议使用,虽然这个开关可以在开发过程中提供便利,但它带来了重大的安全风险,并且绝不应该在生产环境中使用。始终优先考虑应用的安全性,并避免在不受信任的环境中降低安全标准。

完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式Linux应用开发中CAN通信实现

14.1 CAN介绍 14.1.1 CAN是什么? CAN,全称为“Controller Area Network”,即控制器局域网,是国际上应用最广泛的现场总线之一。最初,CAN 被设计作为汽车环境中的微控制器通讯,在车载各电子控制装置 ECU 之间交换信息,形成汽车电子控制网络。比如:发动机管理系统、变速…

Grafana功能菜单介绍

Grafana的功能菜单设计为侧边栏(sidebar)形式,可以折叠隐藏,便于我们更加专注数据的可视化。现将菜单栏各项功能进行编号讲解,如下图所示:① Grafana Logo 在这里插入图片描述 点击Grafana的logo,无论当前处于哪个页面,都会跳转回Home Page(主页)。② 新建与导入用于…

MVC基础——市场管理系统(二)

文章目录 项目地址三、Produtcts的CRUD3.1 Products列表的展示页面(Read)3.1.1 给Product的Model里添加Category的属性3.1.2 View视图里展示Product List3.2 增加Product数据(Add)3.2.1 创建ViewModel用来组合多个Model3.2.2 在_ViewImposts里引入ViewModels3.2.3 添加Add的…

前端 mp4 视频改成 m3u8 流模式

前端 mp4 视频改成 m3u8 流模式 mp4 视频的问题 1、mp4 视频通常对应一个文件,播放时需要加载全部文件,消耗网络资源。如果用户从中间某个时间访问,也会从头开始下载,浪费服务器性能。 2、mp4 视频文件容易被用户下载到本地。有…

爬虫基础之代理的基本原理

在做爬虫的过程中经常会遇到一种情况,就是爬虫最初是正常运行、正常抓取数据的,一切看起来都是那么美好,然而一杯茶的工夫就出现了错误,例如 403 Forbidden,这时打开网页一看,可能会看到“您的IP访问频率太…

如何将自己的PHP类库发布到composer仓库

将自己的 PHP 类库发布到 Composer 仓库,需要经过一系列的准备和操作步骤,以下是详细说明: 准备工作 创建类库项目:确保你的 PHP 类库项目具有清晰的目录结构,遵循 PSR-4 等 PHP 编码规范。通常,类文件应…

频道web - 性能优化之往返缓存

性能优化之往返缓存 往返缓存简介:如何验证当前页面是否有往返缓存?有哪些开发场景可以用bfcache提升性能?哪些无需关注?阻止页面进行往返缓存的行为都有哪些?1、缓存2、强制刷新3、浏览器设置4、JavaScript 代码5、网络问题6、 iframe 本身不符合 bfcache 的条件为什么会…

当前热门 DApp 模式解析:六大方向的趋势与创新

去中心化应用(DApp)随着区块链技术的不断发展,已经成为 Web3 领域的核心创新之一。与传统应用不同,DApp 通过智能合约运行在区块链上,具有去中心化、透明、安全等特点。近年来,随着用户需求的变化和技术的发…

Windows中将springboot项目运行到docker的容器中

0,先打包好项目,再启动docker 1,在Java项目根目录下创建一个名为Dockerfile的文件(没有扩展名),并添加以下内容。 # 使用OpenJDK的基础镜像 FROM openjdk:8-jdk-alpine# 设置工作目录 WORKDIR /app# 将项…

使用html 和javascript 实现微信界面功能1

1.功能说明: 搜索模块: 提供一个搜索框,但目前没有实现具体的搜索功能。 好友模块: 在左侧的“好友”部分有一个“查看好友”按钮。点击左侧的“查看好友”按钮时,会在右侧显示所有好友的列表。列表中每个好友可以点击查看详情,包…

uniapp——H5中使用富文本编辑器,如何使用。

一、插件市场 去插件市场找到这个插件https://ext.dcloud.net.cn/plugin?id14726 二、引入 找到自己项目引入 项目里面多了很多文件 三、使用 找到A页面&#xff0c;在里面引入组件 <view class"editBox"><sp-editor exportHtml"handleExpor…

前端视角下的Go语法学习:创建 Go 项目

今日话题 使用 GoLand 创建 Go 项目 作者&#xff1a; 时间&#xff1a;2024年6月20日 17时16分14秒 主线任务 一、GoLand 创建项目 1、点击 “new Project” 按钮 2、已经有下载过两个 Golang SDK 版本&#xff0c;选择版本创建即可~ 3、如果没有下载过Golang SDK&#…

使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘

环境&#xff1a;windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui &#xff0c;main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错&#xff0c;运行报错。 错误如下: 解决方法&#xff1a;pyinstaller -Fw main.py --paths. 使…

1. 机器学习基本知识(4)——机器学习测试和验证

1.6 测试和验证 了解模型对新实例的泛化能力的唯一方法是在新实例上进行实际尝试。 一种方法是将模型部署到生产环境并监控其性能。 ​ 这种方法很有效&#xff0c;但如果模型非常糟糕&#xff0c;你的用户就会抱怨&#xff0c;所以这显然不是最好的方法。 更好的选择是将数…

Qwen 论文阅读记录

本文仅作自己初步熟悉大模型&#xff0c;梳理之用&#xff0c;慢慢会更改/增加/删除&#xff0c;部分细节尚未解释&#xff0c;希望不断学习之后&#xff0c;能够完善补充。若有同道之人&#xff0c;欢迎指正探讨。 关于后面的code-qwen and math-qwen&#xff0c;我个人认为依…

yarn 安装问题

Couldn’t find package “regenerator-runtime” on the “npm” registry. Error: Couldn’t find package “watch-size” on the “npm” regist 标题Error: Couldn’t find package “babel-helper-vue-jsx-merge-props” on the “npm” registry. Error: Couldn’t f…

【开源】基于SpringBoot框架的音乐网站与分享平台(计算机毕业设计)+万字说明文档 T011

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 IDE环境&#xff1a; Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境&#xff1a; Tomcat 7.x,8.x,9.x版本均可 操作系统…

【SpringMVC】应用分层

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;场景引入 二&#xff1a;前后端分离三层架构 1&#xff1a;表现层 2&#xff1a;业务…

防火墙旁挂部署+故障切换

一、实验环境 华为ENSP 二、拓扑 三、目的 1、内网PC1访问Server 2、防火墙旁挂部署&#xff0c;对流量进行过滤&#xff0c;防火墙挂掉之后&#xff0c;内网PC1能继续访问到Server 3、防火墙恢复正常后&#xff0c;流量能回切至防火墙转发 四、思路&#xff1a; 1、AR1…

MySQL8版本升级

1.官方升级手册必看 1.1 理解升级过程会做什么 手册网址&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/upgrading.html 升级mysql 系统数据库&#xff08;默认的库&#xff09;&#xff0c;升级mysql 用户数据库&#xff08;用户创建的库&#xff09; 升级步骤分为…