Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
Sensor APIs - это набор интерфейсов, построенных по общему дизайну, которые последовательно предоставляют доступ к датчикам устройств на веб-платформе.
Несмотря на то, что спецификация Generic Sensor API определяет интерфейс Sensor, вам, как веб-разработчику, не придётся его использовать. Вместо него, для получения данных с конкретных датчиков, вы будете использовать один из его подклассов. Например, интерфейс Accelerometer возвращает ускорение перемещения устройства по всем трём осям на момент его считывания.
Данные с датчиков могут точно соответствовать данным с физических датчиков устройства, либо не соответствовать им. Например, интерфейс датчика Gyroscope точно соответствует интерфейсу физического датчика. В качестве альтернативы, интерфейс AbsoluteOrientationSensor предоставляет информацию, которая алгоритмически объединяет данные с двух и более датчиков устройста. Два эти типа датчиков называются низкоуровневыми и высокоуровневыми соответственно. Второй тип так же называют объединяющим датчиком (либо, виртуальным или, синтетическим).
Интерфейсы датчиков - это только прокси для датчиков устройства. Как следствие, задача определения возможности использования датчиков гораздо сложнее, чем для других API. Наличие API датчика не значит, что этот API подключен к реальному аппаратному датчику, работает ли он, подключен или, даже, предоставил ли пользователь к нему доступ. Обеспечение постоянного доступа ко всей этой информации приводит к снижению производительности и разряду батареи.
Таким образом, определение возможности использования API датчиков должно включать определение наличия самого этого API и стратегии оборонительного программирования (см. ниже).
Пример ниже показывает три метода определения API датчика. Кроме того, вы можете обернуть создание экземпляра объекта в блок try...catch. Обратите внимание, что определение через интерфейс Navigator не единственный возможный путь.
Как указано в разделе Возможность использования, проверить наличие конкретного API датчика недостаточно. Наличие фактического датчика также должно быть подтверждено. Как раз здесь и необходимо оборонительное программирование. Оно включает три стратегии.
Приведенный ниже пример кода иллюстрирует эти принципы. Блок try...catch ловит ошибки, возникающие при создании объекта датчика. Этот объект слушает события error, чтобы поймать ошибки, возникающие во время использования датчика. Единственный раз, когда что-либо показывается пользователю, это когда необходимо запросить разрешения и когда датчик не поддерживается устройством.
Примечание: Если функциональная политика блокирует использование функции, то это происходит потому, что ваш код не соответствует политикам, установленным на вашем сервере. Это не то, что когда-либо будет показано пользователю. Статья о HTTP заголовке Feature-Policy содержит инструкцию по реализации.
Показания датчиков могут сниматься только в том случае, если пользователь дает разрешение на определенный тип датчика. Сделать это можно используя Permissions API. Короткий пример, показанный ниже, запрашивает у пользователя разрешение перед попыткой использовать датчик.
Альтернативный подход заключается в попытке использовать датчик и прослушивании SecurityError.
В следующей таблице для каждого типа датчика описано имя, требуемое для Permissions API, атрибут allow элемента <iframe> и директива Feature-Policy.
| AbsoluteOrientationSensor | 'accelerometer', 'gyroscope', и 'magnetometer' |
| Accelerometer | 'accelerometer' |
| AmbientLightSensor | 'ambient-light-sensor' |
| GravitySensor | 'accelerometer' |
| Gyroscope | 'gyroscope' |
| LinearAccelerationSensor | 'accelerometer' |
| Magnetometer | 'magnetometer' |
| RelativeOrientationSensor | 'accelerometer', и 'gyroscope' |
Показания датчиков принимаются через событие reading, которое унаследовано для всех типов датчиков. Частота получения данных зависит от вас и указывается как параметр объекта, переданного в конструктор класса. Этот параметр определяет количество опросов датчика в секунду. Можно использовать целое или десятичное число, последнее для частот менее секунды. Фактическая частота считывания зависит от аппаратного обеспечения устройства и, следовательно, может быть меньше запрошенной.
Пример ниже иллюстрирует это используя Magnetometer.
Описывает физическую ориентацию устройства относительно системы координат Земли.
AccelerometerSecure contextПоказывает ускорение, приложенное к устройству по всем трём осям.
AmbientLightSensorSecure contextВозвращает текущий уровень освещенности или освещенность окружающего освещения вокруг устройства.
GravitySensorSecure contextПоказывает силу тяжести, приложенную к устройству по всем трём осям.
GyroscopeSecure contextПоказывает угловую скорость устройства по всем трём осям.
LinearAccelerationSensorSecure contextПоказывает ускорение, приложенное к устройству по всем трём осям, но без силы тяжести.
MagnetometerSecure contextПредоставляет информацию о магнитном поле, обнаруженном основным магнитометром устройства.
OrientationSensorSecure contextБазовый класс для AbsoluteOrientationSensor. Этот класс не может быть использован сам по себе, вместо этого он предоставляет свойства и методы, к которым обращаются наследуемые от него интерфейсы.
RelativeOrientationSensorSecure contextОписывает физическую ориентацию устройства без учета системы координат Земли.
SensorSecure contextБазовый класс для всех других интерфесов датчиков. Этот класс не может быть использован сам по себе. Вместо этого он предоставляет свойства, обработчики событий и методы, к которым обращаются интерфейсы, которые наследуются от него.
SensorErrorEventSecure contextПредоставляет информацию об ошибках, вызванных Sensor или связанным интерфейсом.
| Generic Sensor API |
| Accelerometer |
| Orientation Sensor |
| Ambient Light Sensor |
| Gyroscope |
| Magnetometer |
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
Enable JavaScript to view this browser compatibility table.
This page was last modified on 10 авг. 2024 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.