LeCodesdocs

QRScanner

Нативный полноэкранный QR-сканер хоста. Опционален по хосту: приложение le.codes его предоставляет, обычный веб-вьювер (и другие хосты) — нет — всегда проверяй через QRScanner.isSupported, прежде чем предлагать эту возможность.

Обзор

TypeScript
if (QRScanner.isSupported) {
  const scanner = new QRScanner(data => {
    if (data === null) return          // кадр камеры без читаемого кода
    console.log('scanned:', data)
    scanner.close()
  })
  await scanner.open()                 // спрашивает разрешение на камеру, затем открывает сканер
}

API

TypeScript
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 экрана (и после успешного скана), иначе камера останется занятой.

Смотрите также