QRScanner
Нативный полноэкранный QR-сканер хоста. Опционален по хосту: приложение le.codes его
предоставляет, обычный веб-вьювер (и другие хосты) — нет — всегда проверяй через
QRScanner.isSupported, прежде чем предлагать эту возможность.
Обзор
if (QRScanner.isSupported) {
const scanner = new QRScanner(data => {
if (data === null) return // кадр камеры без читаемого кода
console.log('scanned:', data)
scanner.close()
})
await scanner.open() // спрашивает разрешение на камеру, затем открывает сканер
}API
QRScanner.isSupported: boolean // статик — есть ли у этого хоста сканер?
new QRScanner(onData: (data: string | null) => void) // onData срабатывает на каждый декодированный кадр
scanner.open(): Promise<void> // запросить доступ к камере, открыть сканер
scanner.close(): void // закрыть сканер, освободить камеруonDataсрабатывает на каждое значение, которое декодирует сканер;nullозначает кадр без читаемого кода, поэтому жди его повторно, пока пользователь наводит. Один и тот же код может сообщаться не раз — делай дебаунс/close()сам, когда получил нужное.open()выполняет два шага по порядку: запросить разрешение на камеру, затем открыть нативный сканер. Промис разрешается, как только сканер открыт, и отклоняется, если пользователь отказывает в доступе к камере.
Note
в отличие от физики (которая молча делает no-op при отсутствии), open() бросает Error на
хостах без сканера. isSupported — это защита — проверяй её, прежде чем вообще показывать кнопку
«Сканировать». См. гейтинг хоста.
Note
жизненный цикл — сканер держит камеру до вызова close(). Если открываешь его с экрана, закрывай в
onClose экрана (и после успешного скана), иначе камера останется занятой.
Смотрите также
- Соглашения — гейтинг хоста — другие защиты возможностей
(
Physics.supported,Physics2D.supported).