You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET项目IIS部署后HTTP访问遇enumerateDevices报错求助

解决navigator.mediaDevices未定义导致enumerateDevices调用失败的问题

问题原因

现代浏览器出于安全规范,仅在安全上下文(Secure Context)中才会暴露navigator.mediaDevices接口。安全上下文的判定标准包括:

  • 使用HTTPS协议访问
  • 访问地址为localhost/127.0.0.1这类本地回环地址

你当前使用http://123.111.1.222/test/camera.aspx这种HTTP公网地址访问,不属于安全上下文,因此浏览器未加载mediaDevices对象,调用enumerateDevices时触发Cannot read properties of undefined错误。

解决方案

方案1:配置IIS使用HTTPS访问(生产环境推荐)

给部署的站点添加HTTPS绑定,步骤如下:

  1. 打开IIS管理器,找到目标站点,右键选择「编辑绑定」
  2. 点击「添加」,类型选择「HTTPS」,端口默认443,选择已有的SSL证书(无证书可先创建自签证书用于测试,生产环境需使用正规CA签发的证书)
  3. 保存设置后,改用https://123.111.1.222/test/camera.aspx访问站点

方案2:调试阶段临时绕过(仅用于本地测试)

如果仅用于本地调试,可修改浏览器启动参数强制将目标HTTP地址视为安全上下文(以Chrome为例):

  • 关闭所有Chrome窗口
  • 右键Chrome快捷方式,选择「属性」,在「目标」栏末尾添加参数: --unsafely-treat-insecure-origin-as-secure=http://123.111.1.222
  • 启动Chrome后访问目标地址即可临时生效

注意:此方法仅适用于调试,生产环境禁止使用

代码兼容优化

在调用媒体设备API前增加存在性检查,避免直接报错:

// 先检查mediaDevices是否存在
if (!navigator.mediaDevices) {
  alert('当前环境不支持媒体设备访问,请使用HTTPS协议或本地回环地址打开页面');
  return;
}
navigator.mediaDevices.enumerateDevices().then(gotDevices).catch(handleError);

内容的提问来源于stack exchange,提问作者mam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:50:20