undefined не является объектом (оценка 'navigation.mediaDevices.getUserMedia') - PullRequest
2 голосов
/ 14 июля

Я хочу открыть сканер камеры, и ниже приведен код, который работает правильно в android, но в ios появляется ошибка

TypeError: undefined не является объектом (оценка '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 Ответ

2 голосов
/ 14 июля

getUserMedia недоступно для WKWebView, который использует конденсатор. Таким образом, вы не сможете использовать его, если Apple не сделает getUserMedia доступным в будущем.

...