undefined 不是对象(评估“navigation.mediaDevices.getUserMedia”)

Posted

技术标签:

【中文标题】undefined 不是对象(评估“navigation.mediaDevices.getUserMedia”)【英文标题】:undefined is not an object (evalution 'navigation.mediaDevices.getUserMedia') 【发布时间】:2020-07-14 10:49:11 【问题描述】:

我想打开一个相机扫描仪,下面是在 android 中正常工作但在 ios 中出现错误的代码

TypeError: undefined is not an object (evaluation 'navigation.mediaDevices.getUserMedia')

这里是完整的教程链接https://devdactic.com/pwa-qr-scanner-ionic/ 非常感谢您的帮助

async startScan() 
  // Not working on iOS standalone mode!
  const stream = await navigator.mediaDevices.getUserMedia(
    video:  facingMode: 'environment' 
  );
 
  this.videoElement.srcObject = stream;
  // Required for Safari
  this.videoElement.setAttribute('playsinline', true);
 
  this.loading = await this.loadingCtrl.create();
  await this.loading.present();
 
  this.videoElement.play();
  requestAnimationFrame(this.scan.bind(this));

 
async scan() 
  if (this.videoElement.readyState === this.videoElement.HAVE_ENOUGH_DATA) 
    if (this.loading) 
      await this.loading.dismiss();
      this.loading = null;
      this.scanActive = true;
    
 
    this.canvasElement.height = this.videoElement.videoHeight;
    this.canvasElement.width = this.videoElement.videoWidth;
 
    this.canvasContext.drawImage(
      this.videoElement,
      0,
      0,
      this.canvasElement.width,
      this.canvasElement.height
    );
    const imageData = this.canvasContext.getImageData(
      0,
      0,
      this.canvasElement.width,
      this.canvasElement.height
    );
    const code = jsQR(imageData.data, imageData.width, imageData.height, 
      inversionAttempts: 'dontInvert'
    );
 
    if (code) 
      this.scanActive = false;
      this.scanResult = code.data;
      this.showQrToast();
     else 
      if (this.scanActive) 
        requestAnimationFrame(this.scan.bind(this));
      
    
   else 
    requestAnimationFrame(this.scan.bind(this));
  

【问题讨论】:

【参考方案1】:

getUserMedia 在 Capacitor 使用的 WKWebView 上不可用。因此,除非 Apple 将来提供 getUserMedia,否则您将无法使用它。

【讨论】:

***.com/questions/45692526/… 这个解决方案行不通? 不,getUserMedia 在 Safari 中可用,但在 WKWebView 中不可用 Apple Safari 很可能会取代 Microsoft Internet Explorer 长期以来与其他浏览器极其不兼容的冠军。

以上是关于undefined 不是对象(评估“navigation.mediaDevices.getUserMedia”)的主要内容,如果未能解决你的问题,请参考以下文章

React native - undefined 不是一个对象('评估 this.props.navigation')

undefined 不是对象(评估“navigation.mediaDevices.getUserMedia”)

TypeError undefined 不是对象(评估'e.props.onChangeToken')

undefined不是对象(评估'_effects.buffers.expanding')

Expo SDK32 undefined 不是对象(评估 '_expo2.default.KeepAwake')

undefined 不是对象(评估“sound.loadAsync”)- React Native