Проблема с включением webusb в chrome

Я пытаюсь включить функцию webusb в Chrome, чтобы проверить ее. Я пытаюсь запустить эту демонстрацию (https://github.com/webusb/arduino) локально на мой веб-сервер, но он не работает, вместо этого работает версия, опубликованная на github.

Моя установка:

  • Виртуальный хост веб-сервера Apache с поддержкой ssl и самозаверяющим сертификатом
  • Последний Google Chrome с включенными флагами webusb и экспериментального API
  • Импортированный самозаверяющий сертификат в Chrome, чтобы он доверял ему как действительному сертификату
  • Удалить метаданные Origin Trials из демо

Но когда я обращаюсь к демонстрационной странице, я получаю ошибку javascript, потому что navigator.usb не определен.

Что не так в моей настройке, почему navigator.usb не включен в моей локальной настройке, но включен, когда я просматриваю онлайн-демонстрацию из того же браузера?


person Fabiano Taioli    schedule 01.12.2016    source источник


Ответы (1)


Чтобы запустить его, вам необходимо включить функции экспериментальной веб-платформы, вы можете найти их во флагах Chrome:

chrome://flags/#enable-experimental-web-platform-features

Теперь navigator.usb будет доступен, однако, если вы разрабатываете на localhost, вы не увидите никаких устройств. Чтобы устройства отображались, вы должны загрузить Chrome с --disable-webusb-security, который выдаст уведомление о том, что безопасность пострадает, и позволит вам увидеть все подключенные устройства. Более подробное объяснение см. на странице https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web

person Joris Blaak    schedule 05.12.2016
comment
Здравствуйте, я попытался выполнить шаги по ссылке, которую вы дали для более подробного объяснения, но не повезло, requestDevice(... фильтры... бла-бла-бла... vendorId...) выдает сообщение об ошибке SecurityError: необходимо обрабатывать жест пользователя, чтобы показать запрос на разрешение. и getDevices() возвращает 0 устройств. chrome Версия 58.0.3029.96 (64-разрядная версия) и запуск chrome из файла bat: TASKKILL /F /IM chrome.exe start chrome.exe --args --disable-web-security --user-data-dir=c:/ хромдев - person user1; 09.05.2017
comment
Прежде чем пытаться что-либо сделать, должно быть взаимодействие с пользователем, в большинстве случаев это означает, что вы должны инициировать соединение после нажатия кнопки или чего-то подобного. - person Joris Blaak; 09.05.2017
comment
мое устройство представляет собой просто специальное устройство чтения NFC для наших тегов NFC, которые собирают данные, на нем нет кнопок, у нас есть настольное приложение, которое отправляет сообщение на устройство чтения, чтобы устройство чтения могло начать сканирование тегов, но без дескриптора на устройстве я не уверен, как отправить это сообщение читателю. когда я работал с chrome.serial, я смог получить дескриптор устройства (но chrome.serial постепенно прекращается, поэтому мы не хотим его использовать), подумал, может быть, они устарели что-то для этой версии, так как она все еще экспериментальная . - person user1; 09.05.2017
comment
Хорошо, я понял, я неправильно использовал API, нужно было дождаться завершения getDevices, прежде чем использовать requestDevice. поэтому мой порядок вызовов методов таков: addEventListener('DOMContentLoaded'){navigator.usb.getDevices()}, чем нажатие кнопки выполнит метод navigator.usb.requestDevice. моя ошибка, я думаю, заключалась в том, что getDevices не закончилась до того, как был достигнут requestDevice (getDevices, вероятно, работает в другом потоке?). - person user1; 09.05.2017
comment
хорошо, у меня есть своего рода момент ладони, я сейчас пытаюсь вызвать метод open(), но он возвращает ошибку: SecurityError: Доступ запрещен. Я пытался открыть хром с помощью флагов --disable-web-security и --disable-web-security (флаг webusb отсутствует в списке флагов chrome здесь: ссылка), возможно, этот флаг сейчас удален? Я нашел эту [ссылку] (chrome://usb-internals/) для добавления тестовых устройств, но не смог заставить ее работать ни с одним из тестовых устройств, которые я сделал. - person user1; 09.05.2017
comment
Когда в Ubuntu я столкнулся с тем, что мой пользователь, не владеющий соединением, дал мне именно эту ошибку. Вы можете изменить его с помощью sudo chown group:user /dev/ttyACM0 (укажите свой адрес и пользователя/группу) - person Joris Blaak; 10.05.2017