每当我尝试在网络浏览器中运行二维码项目时,相机无法工作

问题描述 投票:0回答:1

我有一个项目想法,员工在网上提交申请后,扫描公司给的申请人的二维码。每当员工扫描二维码时,申请人的记录就会自动出现。问题是每当我尝试在 Chrome 浏览器中运行代码时,我的浏览器中都没有出现摄像头。

我使用 XAMPP 通过 PHP 和 JavaScript 进行本地开发。我尝试了一些方法来修复它,也要求 ChatGPT 解决这个问题,但问题仍然存在。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>QR Code Scanner</title>
    <script src="https://unpkg.com/html5-qrcode/minified/html5-qrcode.min.js"></script>
    <style>
        #qr-reader {
            width: 300px;
            height: 300px;
            border: 1px solid #ccc;
            margin: auto;
        }
        #result {
            margin-top: 20px;
            text-align: center;
        }
        #camera-select {
            display: block;
            margin: auto;
        }
    </style>
</head>
<body>
    <h1>QR Code Scanner</h1>
    <select id="camera-select"></select>
    <div id="qr-reader"></div>
    <div id="result">
        <p id="result-text">Scan a QR code to see the result here.</p>
    </div>

    <script>
        async function initializeCameraSelection() {
            const cameraSelect = document.getElementById('camera-select');
            
            // Get available devices
            const devices = await Html5Qrcode.getCameras();
            if (devices && devices.length) {
                // Populate camera select options
                devices.forEach(device => {
                    const option = document.createElement('option');
                    option.value = device.id;
                    option.text = device.label || `Camera ${cameraSelect.options.length + 1}`;
                    cameraSelect.appendChild(option);
                });
                
                // Set default to first camera
                if (devices.length > 0) {
                    cameraSelect.value = devices[0].id;
                }
            } else {
                console.log("No cameras found.");
            }
        }

        async function startScanning() {
            const selectedCameraId = document.getElementById('camera-select').value;
            const html5QrCode = new Html5Qrcode("qr-reader");

            html5QrCode.start(
                { facingMode: { exact: selectedCameraId } }, // Select the chosen camera
                {
                    fps: 10,    // Frames per second
                    qrbox: 250  // QR box size
                },
                (decodedText, decodedResult) => {
                    document.getElementById('result-text').innerText = `QR Code content: ${decodedText}`;
                    console.log(`Scan result: ${decodedText}`);
                    // You can handle the scan result here (e.g., send it to the server or redirect)
                },
                (errorMessage) => {
                    console.log(`QR Code scan error: ${errorMessage}`);
                }
            ).catch(err => {
                console.log(`Error starting QR code scanner: ${err}`);
            });
        }

        // Initialize camera selection and start scanning
        initializeCameraSelection().then(() => {
            document.getElementById('camera-select').addEventListener('change', startScanning);
            startScanning(); // Start scanning with the default selected camera
        });
    </script>
</body>
</html> 

我尝试了 ChatGPT 所说的一切,但问题仍然存在,我希望在浏览器中显示我的相机来扫描二维码。

javascript browser camera
1个回答
0
投票
here is my code:

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>QR Code Scanner</title>
    <script src="https://unpkg.com/html5-qrcode/minified/html5-qrcode.min.js"></script>
    <style>
        #qr-reader {
            width: 300px;
            height: 300px;
            border: 1px solid #ccc;
            margin: auto;
        }
        #result {
            margin-top: 20px;
            text-align: center;
        }
        #camera-select {
            display: block;
            margin: auto;
        }
    </style>
</head>
<body>
    <h1>QR Code Scanner</h1>
    <select id="camera-select"></select>
    <div id="qr-reader"></div>
    <div id="result">
        <p id="result-text">Scan a QR code to see the result here.</p>
    </div>

    <script>
        async function initializeCameraSelection() {
            const cameraSelect = document.getElementById('camera-select');
            
            // Get available devices
            const devices = await Html5Qrcode.getCameras();
            if (devices && devices.length) {
                // Populate camera select options
                devices.forEach(device => {
                    const option = document.createElement('option');
                    option.value = device.id;
                    option.text = device.label || `Camera ${cameraSelect.options.length + 1}`;
                    cameraSelect.appendChild(option);
                });
                
                // Set default to first camera
                if (devices.length > 0) {
                    cameraSelect.value = devices[0].id;
                }
            } else {
                console.log("No cameras found.");
            }
        }

        async function startScanning() {
            const selectedCameraId = document.getElementById('camera-select').value;
            const html5QrCode = new Html5Qrcode("qr-reader");

            html5QrCode.start(
                { facingMode: { exact: selectedCameraId } }, // Select the chosen camera
                {
                    fps: 10,    // Frames per second
                    qrbox: 250  // QR box size
                },
                (decodedText, decodedResult) => {
                    document.getElementById('result-text').innerText = `QR Code content: ${decodedText}`;
                    console.log(`Scan result: ${decodedText}`);
                    // You can handle the scan result here (e.g., send it to the server or redirect)
                },
                (errorMessage) => {
                    console.log(`QR Code scan error: ${errorMessage}`);
                }
            ).catch(err => {
                console.log(`Error starting QR code scanner: ${err}`);
            });
        }

        // Initialize camera selection and start scanning
        initializeCameraSelection().then(() => {
            document.getElementById('camera-select').addEventListener('change', startScanning);
            startScanning(); // Start scanning with the default selected camera
        });
    </script>
</body>
</html> 
© www.soinside.com 2019 - 2024. All rights reserved.