XRSystem
Ограниченная доступность
Эта функция не относится к Baseline, поскольку она не работает в некоторых из самых широко используемых браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Экспериментально: Это экспериментальная технология
Перед использованием в продакшене тщательно проверьте таблицу совместимости браузеров.
Интерфейс API устройства WebXR XRSystem предоставляет методы, которые позволяют получить доступ к объекту XRSession, представляющему сеанс WebXR. С этим XRSession вы можете взаимодействовать с устройством дополненной реальности (AR) или виртуальной реальности (VR).
Свойства экземпляра
Хотя XRSystem напрямую не предлагает свойств, он наследует свойства от своего родительского интерфейса, EventTarget.
Методы экземпляра
В дополнение к наследованию методов от родительского интерфейса EventTarget, интерфейс XRSystem включает следующие методы:
-
isSessionSupported()Экспериментально -
Возвращает промис, который разрешается до
trueесли браузер поддерживает указанный режим сеанса. Разрешается доfalseесли указанный режим не поддерживается. -
requestSession()Экспериментально -
Возвращает промис, который разрешается до нового
XRSessionс указанным режимом сеанса.
События
-
devicechangeЭкспериментально -
Отправляется, когда набор доступных устройств XR изменился. Также доступен с помощью обработчика событий
ondevicechange.
Примечания по использованию
Этот интерфейс ранее был известен как XR в более ранних версиях спецификации; если вы видите ссылки на XR в коде или документации, замените их на XRSystem.
Примеры
Следующий пример демонстрирует, как использовать как isSessionSupported(), так и requestSession().
if (navigator.xr) {
immersiveButton.addEventListener("click", onButtonClicked);
navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
immersiveButton.disabled = !isSupported;
});
}
function onButtonClicked() {
if (!xrSession) {
navigator.xr.requestSession("immersive-vr").then((session) => {
// onSessionStarted() not shown for reasons of brevity and clarity.
onSessionStarted(session);
});
} else {
// Shut down the already running XRSession
xrSession.end().then(() => {
// Since there are cases where the end event is not sent, call the handler here as well.
onSessionEnded();
});
}
}
Этот код начинает с проверки доступности WebXR, проверяя наличие свойства navigator.xr. Если оно найдено, значит WebXR присутствует, и мы продолжаем установкой обработчика для кнопки, которую пользователь может нажать для включения и выключения интерактивного режима VR.
Однако мы пока не знаем, доступен ли желаемый интерактивный режим. Для определения этого мы вызываем isSessionSupported(), передавая ему желаемые параметры сеанса, прежде чем активировать кнопку, immersiveButton, которую пользователь может использовать для переключения в интерактивный режим только в том случае, если интерактивный режим VR доступен. Если интерактивный VR недоступен, кнопка отключается, чтобы предотвратить ее использование.
Функция onButtonClicked() проверяет, запущен ли уже сеанс. Если нет, мы используем requestSession() для запуска сеанса и, после разрешения возвращённого промиса, вызываем функцию onSessionStarted() для настройки нашего сеанса для рендеринга и т.д.
Если же сеанс XR уже активен, мы вместо этого вызываем end() для завершения текущего сеанса. Когда текущий сеанс завершается, отправляется событие end, поэтому устанавливаем xrSession в null в его обработчике, чтобы зафиксировать тот факт, что у нас больше нет активного сеанса. Таким образом, если пользователь нажмет кнопку снова, начнется новый сеанс.
Спецификации
| Спецификация |
|---|
| API устройства WebXR # xrsystem-interface |
Совместимость браузеров
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
XRSystem |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 12.0 | Нет |
devicechange_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 12.0 | Нет |
isSessionSupported |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 12.0 | Нет |
requestSession |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 12.0 | Нет |
© 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/XRSystem