Получить доступ к USB-накопителю в приложении Electron не удается: исключение не выбрано.

Здравствуйте, я пытаюсь получить доступ к USB-накопителю из электронного приложения, написанного на reactjs.

Поскольку электрон - это Google Chrome, я подумал, что могу использовать USB Web-Api: https://developer.mozilla.org/en-US/docs/Web/API/USB

Итак, я создал такой компонент:

import React from 'react';

const UsbAccessButton = () => (
  <button
    className="usb-access-button"
    onClick={() => {
      navigator.usb
        .requestDevice({ filters: [{ vendorId: 0x0951 }] })
        .then(device => {
          console.log(device.productName);
          console.log(device.manufacturerName);
        })
        .catch(error => {
          console.log(error);
        });
    }}
  >
    Get USB Access
  </button>
);

export default UsbAccessButton;

VendorId является правильным для моего конкретного USB-накопителя. Но когда я нажимаю на кнопку, я получаю такую ​​​​ошибку:

DOMException: No device selected.       usb-access-button.component.jsx:14

Но я хочу перечислить доступные устройства, чтобы пользователь мог выбирать между ними. Так что, может быть, я не понял некоторые части документации или что здесь вызывает проблемы?

ОБНОВЛЕНИЕ: когда я запускаю это приложение в браузере Chrome по умолчанию, я получаю диалоговое окно для выбора между USB-устройствами. Так что похоже, что эта ошибка больше связана с самим электроном.


person Kingalione    schedule 16.01.2020    source источник


Ответы (1)


В настоящее время (январь 2020 г.) невозможно иметь средство выбора устройства для WebUSB в Electron — см. проблему здесь: https://github.com/electron/electron/issues/14545

На данный момент предлагаемое решение заключается в использовании полифилла thegecko/webusb, который использует библиотеку node-usb. вместо.

person Gerrit    schedule 17.01.2020
comment
Привет, спасибо за ответ. Я также пробовал этот webusb, но не смог заставить его работать в моем приложении для реагирования. Я думаю, что здесь проблема с конфигурацией, но, на мой взгляд, документация очень слабая. stackoverflow.com/questions/59772849/ - person Kingalione; 17.01.2020
comment
Я использую node-usb в приложении Electron & React без каких-либо проблем (без использования WebUSB). polyfills), но я надеюсь переключиться на WebUSB, как только проблема будет решена, так как node-usb использует довольно старый форк libusb. - person Gerrit; 18.01.2020
comment
как ты это реализовал? Не могли бы вы показать мне свою конфигурацию в этой теме: stackoverflow.com/questions/59772849/ - person Kingalione; 19.01.2020
comment
Эта ветка была удалена. Чтобы уточнить, я использую node-usb вместо WebUSB в Electron, пока не будет решена проблема создания средства выбора устройства для WebUSB в Electron. - person Gerrit; 20.01.2020