diff --git a/public/pay/camera_test.html b/public/pay/camera_test.html index 57feaf4..c5f7ace 100644 --- a/public/pay/camera_test.html +++ b/public/pay/camera_test.html @@ -60,10 +60,12 @@

Camera Access Test

} else if (state === 'prompt') { statusElem.className = 'alert alert-warning'; statusElem.innerHTML = 'Camera permission: not granted (prompt required)'; + if (inDialogLink) inDialogLink.style.display = 'inline-block'; if (popupLink) popupLink.style.display = 'inline-block'; } else if (state === 'denied') { statusElem.className = 'alert alert-danger'; statusElem.innerHTML = 'Camera permission: denied'; + if (inDialogLink) inDialogLink.style.display = 'inline-block'; if (popupLink) popupLink.style.display = 'inline-block'; } else { statusElem.className = 'alert alert-info'; @@ -104,6 +106,22 @@

Camera Access Test

} } + async function requestCameraInDialog(evt) { + if (evt) evt.preventDefault(); + logElem.style.display = 'none'; + try { + const stream = await navigator.mediaDevices.getUserMedia({ video: true }); + stream.getTracks().forEach(track => track.stop()); + await checkCameraPermission(); + } catch (err) { + console.error('getUserMedia error:', err); + logElem.className = 'alert alert-danger'; + logElem.innerHTML = `Camera error (${err.name}): ${err.message || 'Access failed.'}`; + logElem.style.display = 'block'; + await checkCameraPermission(); + } + } + function openCameraAccessPopup(evt) { if (evt) evt.preventDefault(); const popup = window.open('/pay/camera_access.html', 'camera_access_popup', 'width=500,height=400');