Serial: метод requestPort()
Ограниченная доступность
Эта функция не является базовой, так как она не работает в некоторых из наиболее широко используемых браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Экспериментальная функция: Это экспериментальная технология.
Перед использованием в продуктивном окружении внимательно изучите таблицу совместимости с браузерами.
Метод Serial.requestPort() интерфейса Serial предоставляет пользователю диалоговое окно, в котором он может выбрать последовательное устройство для подключения. Он возвращает Promise, который разрешается экземпляром SerialPort, представляющим выбранное пользователем устройство.
Описание
При первом посещении сайта у него не будет разрешения на доступ к последовательным устройствам. Сначала сайт должен вызвать requestPort(), чтобы запросить у пользователя разрешение на управление этим устройством.
Этот метод должен вызываться с помощью временного активации. Пользователь должен взаимодействовать со страницей или элементом пользовательского интерфейса для работы этой функции.
Синтаксис
requestPort() requestPort(options)
Параметры
optionsНеобязательно-
Объект со следующими свойствами:
filtersНеобязательно-
Список объектов, содержащих идентификаторы поставщика, продукта или класса Bluetooth-службы, используемые для фильтрации типов устройств, доступных пользователю для запроса подключения. Если фильтры не указаны, пользователю будет представлен список всех доступных устройств для выбора. Фильтры могут содержать следующие значения:
bluetoothServiceClassIdНеобязательно-
Беззнаковое целое число или строка, представляющая идентификатор класса Bluetooth-службы. Это может быть псевдоним UUID 16 или 32 бит, любой допустимый UUID или допустимое имя из ключей назначенных служб GATT.
usbVendorIdНеобязательно-
Беззнаковое короткое целое число, определяющее поставщика USB-устройств. USB Implementors Forum присваивает идентификаторы определённым поставщикам.
usbProductIdНеобязательно-
Беззнаковое короткое целое число, определяющее USB-устройство. Каждый поставщик присваивает идентификаторы своим продуктам.
allowedBluetoothServiceClassIdsНеобязательно-
Список беззнаковых целых чисел и/или строк, представляющих идентификаторы классов Bluetooth-служб. Порты Bluetooth с пользовательскими идентификаторами класса службы исключаются из списка портов, представленных пользователю, если идентификатор класса службы не включен в этот список. Это справедливо как при фильтрации списка, так и без неё.
Возвращаемое значение
A Promise, который разрешается экземпляром SerialPort.
Исключения
-
SecurityErrorDOMException -
Возвращаемый
Promiseотклоняется с этой ошибкой в следующих ситуациях:- Политика разрешений
serialблокирует использование этой функции. - Запрос разрешения пользователя был отклонен.
- Политика разрешений
-
NotFoundErrorDOMException -
Возвращаемый
Promiseотклоняется с этим исключением, если пользователь не выбирает порт при запросе.
Примеры
Выбор любого устройства
Этот пример использует requestPort() для запроса выбора устройства при нажатии <button>. Он не включает фильтр, поэтому список выбора будет содержать все доступные устройства:
<button id="connect">Connect</button>
const connectBtn = document.getElementById("connect");
connectBtn.addEventListener("click", () => {
try {
const port = await navigator.serial.requestPort();
// Connect to port or add it to the list of available ports
} catch (e) {
// The user didn't select a device
}
});
Выбор устройства конкретного производителя
В этом случае фильтр передается в requestPort() с идентификатором поставщика USB, чтобы ограничить отображаемые устройства только USB-устройствами определённого производителя.
connectBtn.addEventListener("click", () => {
const usbVendorId = 0xabcd;
try {
const port = await navigator.serial.requestPort({ filters: [{ usbVendorId }] });
// Connect to port or add it to the list of available ports
} catch (e) {
// The user didn't select a device
}
});
Выбор пользовательских служб на основе RFCOMM
Хотя большинство устройств поддерживают SPP-связь через стандартный профиль Bluetooth Classic Serial Port, некоторые используют пользовательские службы связи по радиочастоте (RFCOMM). У таких устройств есть идентификатор класса службы, который не входит в стандартный диапазон UUID Bluetooth.
Для доступа к этим пользовательским службам на основе RFCOMM необходимо передать список allowedBluetoothServiceClassIds в requestPort().
const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";
// Prompt user to select any serial port
// Access to the custom Bluetooth RFCOMM service above will be allowed
const port = await navigator.serial.requestPort({
allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
});
Можно также использовать ключ фильтра bluetoothServiceClassId при вызове requestPort(), чтобы отобразить список отфильтрованных последовательных портов Bluetooth, идентифицированных по идентификаторам класса службы:
const myBluetoothServiceUuid = "01234567-89ab-cdef-0123-456789abcdef";
// Prompt the user to select Bluetooth serial ports with
// the custom Bluetooth RFCOMM service above.
const port = await navigator.serial.requestPort({
allowedBluetoothServiceClassIds: [myBluetoothServiceUuid],
filters: [{ bluetoothServiceClassId: myBluetoothServiceUuid }],
});
Спецификации
| Спецификация |
|---|
| API Веб-последовательности # dom-serial-requestport |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
requestPort |
89 | 89 | Нет | 75 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
allowedBluetoothServiceClassIds_option |
117 | 117 | Нет | 103 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
filters_bluetoothServiceClassId |
117 | 117 | Нет | 103 | Нет | Нет | Нет | Нет | Нет | Нет | Нет |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Serial/requestPort