uni-app ios webview内嵌H5页面 调用navigator.mediaDevices.getUserMedia报错
uni-app ios webview内嵌H5页面 调用navigator.mediaDevices.getUserMedia报错
| 项目 | 信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境操作系统 | Windows |
| PC开发环境操作系统版本号 | windows10 |
| HBuilderX类型 | 正式 |
| HBuilderX版本号 | 3.2.16 |
| 手机系统 | iOS |
| 手机系统版本号 | iOS 13.0 |
| 手机厂商 | 苹果 |
| 手机机型 | iphone 11 pro max |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
navigator.mediaDevices
.getUserMedia(constraints)
.then(this.success)
.catch(this.error);
操作步骤:
navigator.mediaDevices
.getUserMedia(constraints)
.then(this.success)
.catch(this.error);
预期结果:
iOS调起摄像头及麦克风
实际结果:
报错,无法调起
bug描述:
ios webview内嵌H5页面,调用navigator.mediaDevices.getUserMedia报错

更多关于uni-app ios webview内嵌H5页面 调用navigator.mediaDevices.getUserMedia报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
app,是否开启了摄像头和麦克风权限
没有,就要添加相应权限
更多关于uni-app ios webview内嵌H5页面 调用navigator.mediaDevices.getUserMedia报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
开权限了
iOS14.3以下不支持
同问 在Mac 上使用模拟器调试,用sarfari的开发工具去调试Hbuilder里的H5页面,navigator.mediaDevices.getUserMedia() 是undefined; 无法获取,权限也都开了。手机IOS版本是15
同问,我是iOS 14.3的iPhone 7Plus
Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Html5Plus/1.0 (Immersed/20…
我的H5页面在app内使用webview打开时,打印的navigator里面没有mediaDevices属性
我们这又有新发现。uni-app 14.3 iPhone7P ,使用webview打开H5页面,在vconsole控制台打印navigator属性,第一次加载的时候,navigator内没有mediaDevices属性。 但是马上通过location.href跳转一次之后,页面再次打印navigator就有mediaDevices属性了
回复 hx168: 我试了 确实可以。。好神奇
回复 d***@c-go.com.cn: https://webrtc.github.io/adapter/adapter-latest.js 引用这个js navigator.mediaDevices.getUserMedia 这样调用就尅了
回复 3***@qq.com: 没好使啊,是直接引里就行吗?打印navigator.mediaDevices还是空的。
回复 hx168: 怎么实现的,可以讲讲吗?我这location.href跳转一次之后还是没有啊。
在 iOS 的 WebView 中调用 navigator.mediaDevices.getUserMedia 失败,通常是由于 iOS 的安全策略限制导致的。iOS 的 WebView 默认不允许直接访问摄像头和麦克风,除非满足特定条件。
主要问题及解决方案:
-
HTTPS 要求:iOS 要求仅在 HTTPS 环境下允许访问媒体设备。请确保 H5 页面通过 HTTPS 协议加载。如果是本地页面,可以使用
http://localhost或http://127.0.0.1,但云端部署必须使用 HTTPS。 -
用户交互触发:iOS 要求媒体设备的访问必须由用户主动触发(如点击事件)。确保
getUserMedia调用是在用户点击按钮等操作后执行,而不是在页面加载时自动调用。 -
WebView 配置:在 uni-app 中,iOS 的 WebView 可能需要额外配置。在
manifest.json的app-plus节点下,添加以下配置以允许媒体设备访问:"app-plus": { "ios": { "webView": { "mediaCapturePermission": { "allow": true } } } } -
权限提示:iOS 会弹出权限请求对话框,确保用户已授权摄像头和麦克风访问权限。可以在系统设置中检查应用的权限设置。
-
代码示例调整:确保调用代码在用户交互事件内,例如:
document.getElementById('startButton').addEventListener('click', () => { navigator.mediaDevices.getUserMedia({ video: true, audio: true }) .then(stream => { console.log('成功获取媒体流'); }) .catch(err => { console.error('获取媒体流失败:', err); }); });

