sion908
@sion908 (紫苑)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

.getUserMediaが使いたいけど,その前にエラーに襲われている

解決したいこと

ここに解決したい内容を記載してください。

https://houwa-js.co.jp/2019/06/20190604/
こちらを参考にただQRを読みたかったのですが,エラーに阻まれています
助けてください

image.png

該当するソースコード

<video id="player" autoplay></video>
<canvas id="snapshot" width="480" height="640"></canvas>

例)

  let player = document.getElementById('player');
  let snapshotCanvas = document.getElementById('snapshot');
  let width = snapshotCanvas.width;
  let height = snapshotCanvas.height;

  let startScan = function(callback) {
    const canvasContext = snapshotCanvas.getContext("2d");
    // 500ms間隔でスナップショットを取得し、QRコードの読み取りを行う
    let intervalHandler = setInterval(() => {
      canvasContext.drawImage(player, 0, 0, width, height);
      const imageData = canvasContext.getImageData(0, 0, width, height);
      const scanResult = jsQR(imageData.data, imageData.width, imageData.height);

      if (scanResult) {
        clearInterval(intervalHandler);
        console.log(scanResult);

        if (callback) {
          callback(scanResult);
        }
      }
    }, 500)
  };

  let handleSuccess = function(stream) {
    // カメラストリームをプレイヤーのデータに設定
    player.srcObject = stream;

    startScan((scanResult) => {
      // このページの呼び出し元に読み取り結果を返す
    });
  };

  // このメソッドを呼び出すことでユーザーにブラウザがカメラを使用することを許可するかの確認ダイアログが表示され、
  // 許可されれば handleSuccess が呼ばれる
  navigator.mediaDevices.getUserMedia({
    video: {facingMode: "environment", width: width, height: height},
    audio: false
  }).then(handleSuccess)
  .catch(err => {
	  console.log(JSON.stringify(err));
  });

自分で試したこと

最初の変数読み込みでエラーになっているようです
もうお手上げ

0

2Answer

記載のコードだけでは分かりませんが、DOMが描画される前にJavaScriptが実行されている、ということはないですか?

0Like

Comments

  1. @sion908

    Questioner

    その通りでした
    よくわからなかったので,全部したので囲ってやりました
    window.onload=function(){}

Your answer might help someone💌