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

11 回复

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 默认不允许直接访问摄像头和麦克风,除非满足特定条件。

主要问题及解决方案:

  1. HTTPS 要求:iOS 要求仅在 HTTPS 环境下允许访问媒体设备。请确保 H5 页面通过 HTTPS 协议加载。如果是本地页面,可以使用 http://localhosthttp://127.0.0.1,但云端部署必须使用 HTTPS。

  2. 用户交互触发:iOS 要求媒体设备的访问必须由用户主动触发(如点击事件)。确保 getUserMedia 调用是在用户点击按钮等操作后执行,而不是在页面加载时自动调用。

  3. WebView 配置:在 uni-app 中,iOS 的 WebView 可能需要额外配置。在 manifest.jsonapp-plus 节点下,添加以下配置以允许媒体设备访问:

    "app-plus": {
      "ios": {
        "webView": {
          "mediaCapturePermission": {
            "allow": true
          }
        }
      }
    }
    
  4. 权限提示:iOS 会弹出权限请求对话框,确保用户已授权摄像头和麦克风访问权限。可以在系统设置中检查应用的权限设置。

  5. 代码示例调整:确保调用代码在用户交互事件内,例如:

    document.getElementById('startButton').addEventListener('click', () => {
      navigator.mediaDevices.getUserMedia({ video: true, audio: true })
        .then(stream => {
          console.log('成功获取媒体流');
        })
        .catch(err => {
          console.error('获取媒体流失败:', err);
        });
    });
回到顶部